2019-12-19 What is Golang? What's Go?

dprigh.go·2019년 12월 19일
0

golang

목록 보기
1/2
post-thumbnail

go_logo.png


구글에서 2009년에 개발한 프로그래밍 언어

https://golang.org/ 공식 홈페이지

GC 기능이 있고, 병행성을 잘 지원하는 컴파일 언어


- 정적 타이핑 및 대형 시스템으로의 스케일이 가능할 것 (java와 c처럼)

- 너무 많은 필수적인 키워드와 반복 없이도 생산적이고 가독성이 좋을것 (동적 언어와 같이 가벼움)

- 통합 개발 환경이 필요하지 않지만 지원도 가능할것

- 네트워킹 및 다중 처리를 지원할 것


1. 구현체

2개의 주요 구현체가 존재함

  • 구글의 Go 툴체인

  • 2번째 컴파일러 gccgo 프론트엔드

2. 언어 설계

Go의 문법은 대체로 C와 비슷함

- 코드 블록들은 중괄호로 둘러싸고 for, switch, if를 포함한 일반적인 제어구조를 가지고 있다.
- C와 다르게, 한 라인 끝에서 세미콜론은 필수가 아닌 옵션이다.
- 변수 선언은 다르게 작성되고 대개는 옵션이다.
- 형 변환은 명시적으로 해야 한다.
- 병행성 프로그램을 다루기 위해 go와 select 키워드가 사용됨.
- 새로운 타입은 map, 유니코드 문자열, 배열 slice, 그리고 내부 쓰레드 통신을 위한 채널이 있다.

하드웨어가 좋지 않아도 빠르게 컴파일 될 수 있게 디자인 되었다

  • Go는 GC가 되는 언어이다.

  • 병행성과 관련된 Go의 구조적인 규칙(channel/ch input들)은 Tony Hoare의 CSP로부터 가져온것이다.

C++나 java에 있는 기능들 중 타입 상속, 제너릭, 표명, 메서드 오버로딩, 포인터 연산은 Go에서 포함하고 있지 않다.

  • 개발자들은 급하지는 않지만 어느 시점에는 도입될것이라 함.

병행성

  • Go를 이용해 프로그램들이 서로 소통하면서 상태를 공유하는 '동시성' 프로그램을 쉽게 만들 수 있다.

목적

Go는 정적 타입 컴파일 언어의 효율성과 독적 언어처럼 쉬운 프로그래밍을 할 수 있도록 하는 것을 목표로 한다.

  • 또 다른 목적 :

- 안정성 : 타입 안정성과 메모리 안전성
- 병행성과 통신을 위한 훌륭한 지원
- 효과적인 가비지 컬렉션
- 빠른 컴파일

언어 도구

수많은 언어 배포판들과 동일한 종류의 디버깅, 테스트, 코드 검사 도구들을 포함하고 있다.

  • 그중에 배포판은 다음을 포함한다:

- go build : 소스 파일 자체의 정보만을 사용하여 Go 바이너리를 빌드한다. 별도의 makefile은 없다.
- go test : 유닛 테스트 및 마이크로벤치마크
- go fmf : 코드 서식 지정
- go get : 원격 패키지의 검색 및 설치
- go vet : 코드 내의 잠재적인 오류를 찾아내는 정적 분석기
- go run : 코드를 빌드하고 실행하는 바로 가기
- godoc : 문서를 표시, HTTP를 통해 문서 확인
- gorename : 변수, 함수 등을 형 안전(type-safe)방식으로 이름 변경
- go generate : 코드 생성기를 호출하는 표준 방식
  • 프로파일링 및 디버깅 지원, 런타임 인스트루먼테이션(이를테면 GC 일시정지 등을 위해)및 레이스 컨디션 테스터도 포함한다.

예제 (Hello, World!)

Go 언어

package main
import "fmf"
func main() {
	fmf.Println("Hello, World!")
}
profile
dprigh.golang

0개의 댓글