byidev.com
Languages/Go (2)
2024-03-05 23:00:37

go

Go 설치하기

Go 공식 홈페이지에서 Download 버튼을 통해 Go 컴파일러를 설치할 수 있다.

 

The Go Programming Language

DevOps & Site Reliability With fast build times, lean syntax, an automatic formatter and doc generator, Go is built to support both DevOps and SRE.

go.dev

go build

go build 커맨드는 Go 프로그램을 컴파일하여 실행 파일을 생성한다. 일반적으로 소스 코드 파일을 컴파일하여 실행 파일을 생성하며, 이 때 실행 파일의 이름은 소스 코드 파일이 있는 디렉토리의 이름이 된다.

package main

import "fmt"

func main() {
	fmt.Println("Hello World")
}

다음과 같이 간단한 .go 파일을 작성한 후 build 커맨드를 입력해 빌드할 수 있다.

go build {file}

그러면 파일의 이름으로 실행 파일이 생성된다.

go run

go run 커맨드는 Go 프로그램을 컴파일하지 않고 바로 실행한다. 소스 코드 파일을 인자로 받아서 컴파일 없이 실행 파일을 생성하지 않고 코드를 실행한다. 주로 간단한 테스트나 프로토타이핑을 할 때 사용된다.

go run {file}

package

Go 프로그램은 수많은 .go 패키지로 생성된다. 우리는 package 키워드를 통해 Go 코드를 조직화 단위로 정의할 수 있다. 다음과 같이 코드에서 package가 main이면 프로그램은 실행 파일로 컴파일된다.

 

Go는 공백에 의미를 갖지 않는다. 새 줄, 공백 및 탭은 따로 갖춰 작성할 필요가 없지만 가독성을 위해 개발자는 다음과 같이 코드를 작성한다.

package main

import "fmt"

func main () {
  fmt.Println("Hello World")
}

func

func 키워드는 함수를 선언할 때 사용된다. 우리는 다음의 코드에서 func 키워드의 뒤에 main과 (), {}를 붙여 main 함수를 생성한 것이다.

package main

import "fmt"

func main () {
  fmt.Println("Hello World")
}

import와 별칭

import 키워드는 Go 프로그램에서 다른 패키지의 코드를 현재 파일에 가져오는데 사용된다. 다음의 코드에서 우리는 import "fmt"를 통해 Go의 표준 입출력을 가져올 수 있었다. 여기서 import "time"을 보면 t라는 글자가 사용되고 있는데 이와같이 별칭을 사용할 수도 있다.

package main

import "fmt"
import t "time"

func main() {
  fmt.Println("Hello World")
  fmt.Println(t.Now())
}

import 키워드를 통해 여러개의 패키지를 등록할 때는 다음과 같이 사용할 수도 있다.

import (
    "fmt"
    "time"
)

go doc

코드를 작성할 때 fmt와 같은 패키지를 사용할 때, 해당 패키지에서 제공하는 함수에는 어떤 것들이 있는지 알고 싶다면 go doc 커맨드를 사용해보자. 다음과 같이 패키지 단위 및 패키지의 함수 단위로 설명을 확인할 수 있다.

go doc fmt
go doc fmt.Println
2024-03-05 20:05:48

go

개요

  • 2009년 11월 구글에서 첫 발표, 2012년 3월 정식 발표
  • C++의 복잡함을 해결하고자 개발된 언어
  • Go 언어는 Golang으로 흔히 불림

특징

  • 빠른 컴파일 속도
    • Go의 컴파일러는 매우 빠르며 코드 수정 후 다시 컴파일 하는데 시간이 매우 적게 걸린다.
  • 간결한 문법
    • Go는 문법이 간결하여 코드를 읽고 쓰기 쉽다.
    • 세미콜론을 사용하지 않는 등.
  • 정적 타입 검사
    • Go는 정적 타입 검사를 통해 안정성을 제공한다.
    • 컴파일시 타입 오류를 찾을 수 있어 프로그램의 신뢰성을 높인다.
  • 경량 스레드 고루틴 (Goroutine)
    • Go는 고루틴을 통해 간단하게 병렬 프로그래밍이 가능하다.
    • 고루틴은 OS 스레드보다 경량이며, 여러개의 고루틴을 사용해도 효율적으로 동작한다.
  • 풍부한 표준 라이브러리
    • Go에는 HTTP 서버를 비롯한 다양한 기능을 제공하는 표준 라이브러리가 포함되어 있다.
    • 개발 과정을 단순화하고 생산성을 향상시킨다.
  • 간단한 동기화 메커니즘
    • 고루틴 간의 통신 및 동기화를 위한 채널이라는 메커니즘을 제공해 병렬 프로그래밍을 간소화한다.
  • 크로스 플랫폼 지원
    • Go는 다양한 운영 체제 및 아키텍처를 지원한다.
    • Windows, macOS, Linux, FreeBSD, Android, iOS, WebBrowser(WebAssembly)
  • C언어와의 호환성
    • Go는 C 언어와의 상호 운용성을 제공하여 기존의 C 라이브러리를 사용하거나 Go로 작성된 코드를 C로 호출할 수 있다.
  • 단순함과 실용성
    • 25개의 키워드만 사용하는 단순함과 실용성을 지향하는 언어이다.
    • 아래의 표 참조.
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

단점

  • 고성능 연산에 부적합
    • C/C++에 비해 느린 실행 속도를 가지고 있다.
  • 저수준 시스템 개발에 제한
    • 가비지 컬렉션과 고루틴을 지원하는 런타임 등으로 저수준 시스템 개발에는 적합하지 않을 수 있다.

지원

  • JestBrains - GoLand
  • IntelliJ IDEA - Go Plugin
  • Visual Studio Code
  • Eclipse
  • LiteIDE

버전

Version Release Information
go1 2012.03 초기 릴리스
go1.1 2013.05 빠른 컴파일 속도, 런타임 버그 수정
go1.2 2013.12 병렬 컴파일, for 루프 최적화
go1.3 2014.06 nil 참조 오류 방지, 숫자 계산 최적화
go1.4 2014.12 탈출 분석 컴파일, 커스텀 컴파일러 훅
go1.5 2015.08 SSA 컴파일, 상수 폴딩 최적화
go1.6 2016.02 고루틴 제거 시 가비지 컬렉션 최적화
go1.7 2016.08 컴파일 속도 향상, 새로운 구문 추가
go1.8 2017.02 고루틴 경쟁 상태 수정, 플래그 지원
go1.9 2017.08 기능 개선 및 성능 향상
go1.10 2018.02 기능 개선 및 컴파일 속도 향상
go1.11 2018.08 모듈 지원 추가
go1.12 2019.02 모듈 기능 개선, 고루틴 조건 변수 사용
go1.13 2019.09 기능 개선, 모듈 지원 개선
go1.14 2020.02 기능 개선, 모듈 및 빌드 시스템 개선
go1.15 2020.08 기능 개선, ARM64 지원 추가
go1.16 2021.02 기능 개선, 빌드 속도 향상
go1.17 2021.08 컴파일 속도 향상, 기능 개선
go1.18 2022.02 기능 개선, 모듈 지원 확대
go1.19 2022.08 성능 향상, 새로운 기능 추가
go1.20 2023.02 제네릭 지원 추가
go1.21 2023.08 컴파일 속도 향상, 런타임 최적화
go1.22 2024.02 기능 개선, 모듈 및 라이브러리 업데이트
 

Release History - The Go Programming Language

Release History This page summarizes the changes between official stable releases of Go. The change log has the full details. To update to a specific release, use: git fetch --tags git checkout goX.Y.Z Release