구글에서 2009년에 개발한 프로그래밍 언어
GC 기능이 있고, 병행성을 잘 지원하는 컴파일 언어
- 정적 타이핑 및 대형 시스템으로의 스케일이 가능할 것 (java와 c처럼)
- 너무 많은 필수적인 키워드와 반복 없이도 생산적이고 가독성이 좋을것 (동적 언어와 같이 가벼움)
- 통합 개발 환경이 필요하지 않지만 지원도 가능할것
- 네트워킹 및 다중 처리를 지원할 것
1. 구현체
2개의 주요 구현체가 존재함
구글의 Go 툴체인
2번째 컴파일러 gccgo 프론트엔드
2. 언어 설계
Go의 문법은 대체로 C와 비슷함
- 코드 블록들은 중괄호로 둘러싸고 for, switch, if를 포함한 일반적인 제어구조를 가지고 있다.
- C와 다르게, 한 라인 끝에서 세미콜론은 필수가 아닌 옵션이다.
- 변수 선언은 다르게 작성되고 대개는 옵션이다.
- 형 변환은 명시적으로 해야 한다.
- 병행성 프로그램을 다루기 위해 go와 select 키워드가 사용됨.
- 새로운 타입은 map, 유니코드 문자열, 배열 slice, 그리고 내부 쓰레드 통신을 위한 채널이 있다.
하드웨어가 좋지 않아도 빠르게 컴파일 될 수 있게 디자인 되었다
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!")
}