Skip to content

Go 업데이트 로그

유지보수 버전:

  • go1.25, 첫 릴리스: 2025-08-12, 최신 업데이트: go1.25.0 (2025-08-12)
  • go1.24, 첫 릴리스: 2025-02-11, 최신 업데이트: go1.24.6 (2024-08-06)

Go 언어 공식 업데이트 로그: Release History - The Go Programming Language

Go 공식은 시맨틱 버저닝을 사용하여 버전 식별을 수행하며, 형식은 v주 버전.부 버전.패치 버전입니다 (Semantic Versioning 참조). 주 버전 업데이트는 Breaking Change 가 발생했음을 의미하며, 하위 호환성이 없는 업데이트입니다. 부 버전 업데이트는 새로운 기능이 추가되면서도 하위 호환성을 유지합니다. 패치 버전 업데이트는 문제가 수정되면서 하위 호환성을 유지합니다.

Go 팀은 6 개월마다 2 차 버전을 릴리스하며, 최신 2 차 버전 2 개만 6 개월 동안 장기 유지보수됩니다. Go 의 각 업데이트는 상당히 높은 호환성을 유지하므로, 새 버전이 안정화된 후 적시에 Go 를 최신 버전으로 업그레이드하는 것이 좋습니다.

Go2.0 에 대한 마지막 초안 제안은 2018 년 11 월 19 일이었으며, 당시에는 go1.13 버전이었습니다. 5 년이 지난 후 버전은 go1.21 로 업데이트되었으며, Go2.0 의 다양한 아이디어는 점진적 업데이트를 통해 Go1.0 에 반영되었습니다. 창시자 중 한 명은 미래에 Go2.0 이 없을 것이라고 명시적으로 밝힌 바 있으며, Go 는 하위 호환성을 유지하기 위해 계속 노력할 것입니다 (Go 1 and the Future of Go Programs 참조).

안내

이 페이지는 공식 로그를 간단히 옮긴 것이며, 불규칙적으로 업데이트됩니다. 최신 소식을 원하시면 공식 웹사이트를 방문하세요.

1.25

첫 릴리스: 2025-08-12

최신 업데이트: go1.25.0 (2025-08-12)

go1.25 버전의 자세한 업데이트 로그는 Go 1.24 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.25 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 제네릭의 코어 타입 (core type) 개념 제거, 공식 블로그 Goodbye core types 참조

표준 라이브러리

  1. test/synctest 추가, 동시성 코드 테스트용
  2. 실험적 라이브러리 encoding/json/v2 추가, 포함:
    • encoding/json/v2, 역직렬화 속도가 v1 대비 약 2-10 배 향상, 벤치마크는 go-json-experiment/jsonbench 참조
    • encoding/json/jsontext, json 문자열과의 로우 레벨 상호작용 기능 제공

도구 체인

  1. 향후 Go 배포판에는 소량의 사전 빌드된 바이너리 도구가 포함될 예정
  2. go mod 에 ignore 지시문 추가, go 명령이 무시해야 할 폴더 지정
  3. go doc -http 으로 로컬 http 서버를 시작하여 코드 문서 확인 가능
  4. go vet 에 waitgrouphostport 분석기 추가
  5. go 명령이 go.mod 또는 go.work 의 go 버전을 업데이트할 때 더 이상 go toolchain version 을 추가하지 않음

런타임

  1. GOMAXPROCS 가 컨테이너 환경에서 컨테이너 CPU 제한을 인식

  2. 새로운 실험적 GC greenteagc, GC 의 기본 스케줄링 단위가 object 에서 memory span 으로 변경

  3. panic 이 포착되지 않을 때 더 이상 반복해서 인쇄하지 않음

    panic: PANIC [recovered]
      panic: PANIC

    에서

    panic: PANIC [recovered, repanicked]

    로 변경

  4. runtime/trace.FlightRecorder 추가, 런타임 실행 정보를 더 가볍게 지속적으로 캡처 가능

컴파일러

  1. 1.21 의 null pointer 지연 검사 (오류 검사 이후로 지연) 버그 수정, 아래 코드는 1.25 버전 이전에는 정상 실행됨

    go
    package main
    
    import "os"
    
    func main() {
    	f, err := os.Open("nonExistentFile")
    	name := f.Name()
    	if err != nil {
    		println("should panic") // 1.25 이전에는 이 줄 출력
    		return
    	}
    	println(name)
    }
  2. 컴파일러가 스택에 있는 slice 를 위해 더 많은 백업 메모리를 예약하여 성능 향상

  3. DWARF5 디버깅 정보 생성 지원

1.24

첫 릴리스: 2025-02-11

최신 업데이트: go1.24.6 (2025-08-06)

go1.24 버전의 자세한 업데이트 로그는 Go 1.24 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.24 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 제네릭 타입 별칭, 제네릭 타입에 대한 별칭 생성 허용, 서드파티에서 정의한 제네릭 타입을 참조할 때 유용함

    go
    import (
        "other"
    )
    
    type MyQuque[T any] = other.Queue[T]

표준 라이브러리

  1. weak 패키지 추가: 약한 포인터 (Weak Pointers) 제공, 참조 카운트를 증가시키지 않고 객체를 참조하여 캐시로 인한 메모리 누수 방지,使用前需检查指针是否为 nil
  2. 파일 시스템 접근 제한: os.Root 타입 도입, 파일 작업을 특정 디렉토리 내로 제한하여 보안 강화
  3. 암호화 및 해시 지원: crypto/mlkem, crypto/hkdf, crypto/pbkdf2, crypto/sha3 패키지 추가, 기존 암호화 알고리즘 성능 최적화
  4. 새로운 벤치마크 함수 testing.B.Loop 추가, 루프 테스트 개선
  5. encoding/json: omitzero 태그 추가, IsZero() 메서드 기반의 제로 값 필터링 지원
  6. stringsbytes: 이터레이터 함수 추가 (Lines, SplitSeq, FieldsSeq 등)

런타임

  1. Swiss Tables 을 기반으로 내장 map 리팩토링, 대형 map 접근 속도 30% 향상, 이터레이션 속도 10%-60% 향상
  2. sync.Map 이 동시성 해시 트라이 (hash-trie) 로 변경되어 성능 최적화, 특히 동시 쓰기 상황에서
  3. 런타임 내부의 상호 배타적 락이 새로운 spinbit 구현을 사용하여 락 경쟁 감소, 고동시성 시나리오에서 성능 향상
  4. 작은 객체 할당 전략 최적화, 메모리 단편화 및 GC 일시 중지 시간 감소
  5. runtime.AddCleanup 추가하여 runtime.SetFinalizer 대체, 객체에 대해 여러 개의 정리 함수를 등록하고 독립적인 goroutine 에서 순차적으로 실행 가능

Cgo

  1. #cgo noescape#cgo nocallback 주석 지원, 각각 C 함수가 메모리를 이스케이프하지 않고 Go 함수를 콜백하지 않음을 선언하여 런타임 성능 향상
  2. Cgo 는 이제 여러 개의 호환되지 않는 선언이 있는 C 함수 호출을 거부하며, 파일 간 호환되지 않는 C 함수 선언 (예: void f(int)void f(double)) 을 엄격히 검사하여 잘못된 호출 시퀀스 생성 방지

도구 체인

  1. 모듈 도구 의존성 관리: go.mod 의 tool 지시문을 통해 도구 의존성 추적, 기존 tools.go 빈 import 방식 대체
  2. 구조화된 출력: go build 및 go test 가 -json 플래그 지원, JSON 형식의 빌드 및 테스트 결과 출력
  3. 컴파일 및 링크 최적화: 컴파일러가 더 효율적인 코드 생성, 링커가 기본적으로 GNU Build ID(ELF 플랫폼) 및 UUID(macOS) 생성
  4. CGO 생성 타입에 대한 메서드 정의 제한을 우회하는 별칭 사용 금지
  5. go build 가 자동으로 버전 제어 시스템 정보를 바이너리 파일에 임베드 (-buildvcs=false 로 비활성화 가능)
  6. GOAUTH 환경 변수로 개인 모듈 인증 지원
  7. go.modtool 지시문으로 실행 가능한 의존성 관리, tools.go 빈 import 대체
  8. go get -tool 파라미터 및 go install tool 명령으로 모듈 도구 의존성 관리
  9. 빌드 캐시가 go rungo tool 의 바이너리 캐시 지원
  10. objdump 가 LoongArch, RISC-V, S390X 역어셈블리 지원
  11. vettests 분석기 추가 (테스트 함수 서명 오류 감지)

플랫폼 호환성

  1. macOS: Go 1.24 는 macOS 11 Big Sur 를 지원하는 마지막 버전, Go 1.25 는 macOS 12+ 필요
  2. Windows: 32 비트 ARM 아키텍처를 불완전한 것으로 표시 (GOOS=windows GOARCH=arm), issue #70705 참조
  3. Linux: 최소 커널 버전 요구 사항이 3.2 로 업그레이드됨
  4. 부트스트랩 도구 체인으로 Go 1.22.6+ 필요

폐기

  1. math/rand.Seed() 완전히 비활성화, 이전 동작 복원을 위해 GODEBUG=randseednop=0 필요
  2. runtime.GOROOT() 폐기됨, go env GOROOT 으로 경로 가져오기 권장

1.23

첫 릴리스: 2024-08-13

최신 업데이트: go1.23.4 (2024-12-03)

go1.23 버전의 자세한 업데이트 로그는 Go 1.23 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.23 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. for range 가 이터레이터 함수 지원, 자세한 내용은 Go Wiki: Rangefunc Experiment 참조

    go
    func Upper(s []string) iter.Seq2[int, string] {
      return func(yield func(int, string) bool) {
        for i, s1 := range s {
          if !yield(i, strings.ToUpper(s1)) {
            return
          }
        }
        return
      }
    }
    
    func main() {
      sl := []string{"hello", "world", "golang"}
      for i, s := range Upper(sl) {
        fmt.Printf("%d : %s\n", i, s)
      }
    }
    
    //0 : HELLO
    //1 : WORLD
    //2 : GOLANG

    이는 상당히 실용적인 기능으로, 일반적으로 제네릭과 함께 사용됩니다.

표준 라이브러리

  1. 새로운 표준 라이브러리 iter 추가, 이터레이터에 대한 자세한 정보 정의 및 설명

  2. maps 라이브러리에 여러 이터레이터 함수 추가

  3. slices 라이브러리에 여러 이터레이터 함수 추가

  4. 새로운 structs 라이브러리 추가, 구조체 속성 수정 기능 제공 (예: 메모리 레이아웃)

    go
    type Person struct {
      Name string
      Age  int
      _    structs.HostLayout
    }
  5. time 표준 라이브러리 구현 최적화

Linker

  1. //go:linkname 남용 처리, 자주 인용되는 API 는 일시적으로 허용 (예: runtime.memhash64, runtime.nanotime 등), 이후 새로운 인용은 허용되지 않음

    go
    //go:linkname gcinit runtime.gcinit
    func gcinit()
    
    func main() {
      gcinit()
    }

    위 코드는 컴파일을 통과할 수 없음

    link: main: invalid reference to runtime.gcinit

도구 체인

  1. 원격 측정 데이터 관리를 위한 go telemetry 명령 추가

1.22

첫 릴리스: 2024-02-06

최신 업데이트: go1.22.6 (released 2024-08-06)

go1.22 버전의 자세한 업데이트 로그는 Go 1.22 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.22 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. Go 언어 루프 변수 문제 해결

    go
    func main() {
      var wg sync.WaitGroup
      const n = 10
      wg.Add(n)
      for i := 0; i < n; i++ {
        go func() {
          fmt.Println(i)
          wg.Done()
        }()
      }
      wg.Wait()
    }

    위 코드는 1.22 이전에는 10 개의 9 를 출력했지만, 1.22 이후에는 0 에서 9 까지 정상적으로 출력합니다.

  2. for range 이 이제 숫자 타입 이터레이션 지원

    go
    for i := range 10 {
      fmt.Println(i)
    }

표준 라이브러리

  1. net/http 표준 라이브러리 라우팅 강화

  2. database/sql 에 제네릭 타입 sql.Null 추가

    go
    type Null[T any] struct {
      V     T
      Valid bool
    }

    사용 예:

    go
    type Person struct {
      Name sql.Null[string]
      Age  sql.Null[int]
    }

1.21

첫 릴리스: 2023-08-08

최신 업데이트: go1.21.13 (released 2024-08-06)

go1.21 버전의 자세한 업데이트 로그는 Go 1.21 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.21 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 두 개의 내장 함수 min, max 추가, 최댓값 및 최솟값 계산용

  2. 내장 함수 clear 추가, map 및 slice 비우기용

  3. package 초기화 순서 업데이트

    • 모든 패키지를 import 경로를 기준으로 정렬
    • 패키지 목록이 빌 때까지 반복 실행
    • 목록에서 모든 import 가 초기화된 첫 번째 패키지 찾기
    • 해당 패키지 초기화 후 목록에서 삭제
  4. 타입 추론 능력 및 정밀도 향상 (주로 제네릭 관련)

  5. for range 루프 변수 개선 미리보기 버전 출시, Go 개발자를 10 년 가까이 괴롭힌 문제를 공식적으로 해결, 자세한 내용은 LoopvarExperiment · golang/go Wiki (github.com)Proposal: Less Error-Prone Loop Variable Scoping (googlesource.com) 참조

  6. recover 의 반환 값이 nil이 아님을 보장, panic 호출 시 파라미터가 nil이면 또 다른 panic 발생, *runtime.PanicNilError 반환. 호환성을 위해 컴파일 시 GODEBUG=panicnil=1 설정으로 panicnil 전달 허용

표준 라이브러리

  1. 새로운 log/slog 라이브러리 추가, 표준 구조화 로그 라이브러리 제공
  2. 새로운 testing/slogtest 라이브러리 추가, slog.Handler 구현 검증용
  3. 새로운 slices 라이브러리 추가, 슬라이스 조작을 위한 제네릭 함수 제공
  4. 새로운 maps 라이브러리 추가, map 조작을 위한 제네릭 함수 제공
  5. 새로운 cmp 라이브러리 추가, 순서 있는 타입 비교용

기타

  1. go1.21.0 은 최소한 Windows 시스템에서 Win10 또는 Windows Server 2016 이상 필요, 이전 버전은 더 이상 지원되지 않음
  2. go1.21.0 은 최소한 macOS 10.15 Catalina 이상 필요, 이전 버전은 더 이상 지원되지 않음
  3. 실험적 WebAssembly System Interface 출시, Go 는 WASM 분야에서 지속적으로 탐구 중
  4. 1.20 에서 실험적이었던 PGO(Profile-guided optimization) (Profile-guided optimization - The Go Programming Language 참조) 가 1.21 버전에서 정식 활성화됨. main 패키지에 default.pgo 파일 포함 시 활성화되며, 성능이 2%-7% 향상될 수 있음
  5. 매우 깊은 런타임 호출 스택을 인쇄할 때, 이전에는 첫 100 개 프레임만 인쇄했으나, 이제는 첫 50 개와 마지막 50 개 프레임을 각각 인쇄
  6. Unix 플랫폼에서 CGO 호출 성능 최적화, 1-3 마이크로초에서 100-200 나노초로 개선
  7. 1.21 버전에서 컴파일 속도가 약 6% 향상, 이는 주로 컴파일러 자체가 PGO 를 사용하여 빌드되었기 때문

1.20

첫 릴리스: 2023-02-01

최신 업데이트: go1.20.14 (released 2024-02-06)

go1.20 버전의 자세한 업데이트 로그는 Go 1.20 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.20 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 슬라이스 타입을 배열로 변환할 때, 이전에는 포인터 배열 역참조 *(*[4byte])(x) 로 슬라이스와 동일한 기본 배열과 공유하는 것을 피했으나, 이제는 [4]byte(x) 로 직접 작성 가능
  2. unsafeSliceData, String, StringData 함수 추가, 슬라이스 및 문자열 값 구축용

표준 라이브러리

  1. 새로운 crypto/ecdh 라이브러리 추가, ECDH(Elliptic Curve Diffie-Hellman, 비대칭 암호화 방법) 지원
  2. go1.20 은 error 래핑 지원 확장, 하나의 error 가 여러 error 를 래핑할 수 있음
  3. 새로운 net/http.ResponseContorller 추가, 각 handler controls 를 추가하는 더 명확하고 발견하기 쉬운 방법 제공
  4. httputil.ReverseProxy 에 Director Hook 을 대체하는 새로운 Rewrite Hook 함수 포함

기타

  1. go1.20 은 Win7, 8, Server2008 및 Server2012 를 지원하는 마지막 버전, 향후 버전에서는 지원되지 않음
  2. go1.20 은 macOS 10.13 또는 10.14 를 지원하는 마지막 버전, 향후 버전에서는 지원되지 않음
  3. 1.18 및 1.19 버전에서 제네릭 등장으로 인해 1.17 대비 컴파일 속도가 저하되었으나, go1.20 에서 컴파일 속도가 약 10% 향상됨
  4. PGO(Profile-guided optimization) 미리보기 버전 출시, 컴퓨터계의 컴파일러 최적화 기술로 런타임 성능 향상 가능
  5. go1.20 에서 C toolchains 이 없는 시스템에서 go command 가 cgo 비활성화
  6. 프로그램 코드 커버리지 파일 수집 지원, Coverage profiling support for integration tests - The Go Programming Language 참조
  7. GC 개선으로 안정성 향상, 메모리 오버헤드 감소, 전체 CPU 성능 2% 향상

1.19

첫 릴리스: 2022-08-02

최신 업데이트: go1.19.13 (released 2023-09-06)

go1.19 버전의 자세한 업데이트 로그는 Go 1.19 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.19 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

  1. 메모리 모델이 c/c++ 와 유사하게 변경, TcMollcate 와 유사
  2. sync/atomic 패키지에 더 많은 타입 제공
  3. runtime/debug.SetMemoryLimit 함수로 Go 메모리에 소프트 제한 지원, 특정 상황에서 메모리 활용 효율 제공
  4. 런타임이 goroutine 스택의 평균 사용량을 기반으로 적절한 크기를 선택하여 초기화, 빈번한 스택 확장/축소 방지

1.18

첫 릴리스: 2022-03-15

최신 업데이트: go1.18.10 (released 2023-01-10)

go1.18 버전의 자세한 업데이트 로그는 Go 1.18 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.18 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 대대적인 업데이트, 제네릭 지원, 타입 집합 인터페이스, 파라미터 타입 제약

기타

  1. append 함수의 확장 동작 최적화
  2. 새로운 debug/buildinfo 패키지 추가, 런타임에서 Go 프로그램 빌드 정보 가져오기 가능
  3. gofmt 가 이제 소스 파일을 병렬로 포맷팅

1.17

첫 릴리스: 2021-08-16

최신 업데이트: go1.17.13 (released 2022-08-01)

go1.17 버전의 자세한 업데이트 로그는 Go 1.17 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.17 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 새로운 unsafe.Add 함수 추가, 포인터 연산 지원
  2. 새로운 unsafe.Slice 함수 추가, 슬라이스의 기본 배열 포인터 가져오기 지원
  3. 슬라이스가 이제 배열 포인터 타입으로 변환 가능, []T => *[N]T, 단 배열 길이가 슬라이스 길이 이하여야 함

1.16

첫 릴리스: 2021-02-16

최신 업데이트: go1.16.15 (released 2022-03-03)

go1.16 버전의 자세한 업데이트 로그는 Go 1.16 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.16 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

이 버전에는 중요한 문법 변경이 없음, 중요한 변경사항은 다음과 같음

  1. ioutil 패키지 폐기
  2. //go:embed 지시문으로 정적 파일을 프로그램에 임베드 지원
  3. 새로운 io/fs.Fs 타입 추가, 파일 시스템에 대한 더 나은 추상화 제공

1.15

첫 릴리스: 2020-08-11

최신 업데이트: go1.15.15 (released 2021-08-05)

go1.15 버전의 자세한 업데이트 로그는 Go 1.15 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.15 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

이 버전에는 중요한 문법 변경이 없음, 중요한 변경사항은 다음과 같음

  1. 작은 객체 할당 효율성 최적화

  2. 새로운 time/tzdata 패키지 추가, 아래 방식으로 프로그램에 타임존 데이터베이스 임베드 지원 (많은 시스템에 로컬 타임존 데이터 정보가 없기 때문)

    go
    improt _ "time/tzdata"
  3. Go 링커에 대한 대대적인 개선으로 리소스 사용 감소 및 코드 견고성 향상

  4. 특정 상황에서 unsafe.Pointeruinptr 로 변환 허용

1.14

첫 릴리스: 2020-02-25

최신 업데이트: go1.14.15 (released 2021-02-04)

go1.14 버전의 자세한 업데이트 로그는 Go 1.14 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.14 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 메서드 집합 인터페이스 타입 중첩 지원

    go
    type MyIO interface {
      io.WriteCloser
    }

기타

  1. 오픈 코딩 최적화 도입, defer 호출 오버헤드가 네이티브 호출과 거의 동일하게 감소
  2. goroutine 간 비동기 선점 지원, 함수 호출이 없는 루프는 더 이상 스케줄러를 영구적으로 블로킹하지 않음

1.13

첫 릴리스: 2019-09-03

최신 업데이트: go1.13.15 (released 2020-08-06)

go1.13 버전의 자세한 업데이트 로그는 Go 1.13 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.13 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 더 현대적인 숫자 리터럴 지원

    go
    0b101 // 이진수
    0o10 // 팔진수
    0x1B // 십육진수

    가독성 향상을 위한 밑줄 구분자 지원

    go
    10_000

    허수 i 접미사가 이제 이진수, 팔진수, 십육진수 또는 부동소수점 숫자가 될 수 있음

기타

  1. GO111MODULE 값이 기본적으로 auto 로 설정
  2. 개인 의존성 소스 지원을 위한 새로운 GOPRIVATE 환경 변수 추가
  3. 새로운 GOSUMDB 환경 변수 추가
  4. defer 사용 오버헤드가 30% 감소
  5. 인덱스 경계를 초과할 때 panic 이 이제 인덱스 정보 출력
  6. Go 가 의존성을 다운로드할 때 시맨틱 버전 검증 수행

1.12

첫 릴리스: 2019-02-25

최신 업데이트: go1.12.17 (released 2020-02-12)

go1.12 버전의 자세한 업데이트 로그는 Go 1.12 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.12 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

이 버전에는 중요한 문법 변경이 없음, 중요한 변경사항은 다음과 같음

  1. 힙 스캔 성능 대폭 향상
  2. 런타임이 운영체제에 할당된 메모리를 더 적극적으로 반환
  3. Go 의존성 다운로드 명령이 이제 동시성 안전하게 사용 가능

1.11

첫 릴리스: 2018-08-24

최신 업데이트: go1.11.13 (released 2019-08-13)

go1.11 버전의 자세한 업데이트 로그는 Go 1.11 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.11 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

이 버전에는 중요한 문법 변경이 없음, 중요한 변경사항은 다음과 같음

  1. GoMod 첫 릴리스, 이전 의존성 관리의 혼란 종료
  2. WASM 실험적 지원 시작
  3. 런타임이 희소 힙 레이아웃 채택, 힙 크기 제한 제거

1.10

첫 릴리스: 2018-02-16

최신 업데이트: go1.10.8 (released 2019-01-23)

go1.10 버전의 자세한 업데이트 로그는 Go 1.10 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.10 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

이 버전에는 중요한 문법 변경이 없음, 중요한 변경사항은 다음과 같음

  1. go install 명령이 이제 명령줄 도구 설치 및 컴파일 전용, 더 이상 의존성 다운로드에 사용되지 않음
  2. go get 명령이 이제 소스 의존성 다운로드용
  3. Go 테스트가 이제 테스트 결과를 캐시하며, 실행 전 자동으로 go vet 실행
  4. GC 가 활성화될 때 발생하는 지연 대폭 감소

1.9

첫 릴리스: 2017-08-24

최신 업데이트: go1.9.7 (released 2018-06-05)

go1.9 버전의 자세한 업데이트 로그는 Go 1.9 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.9 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 타입 별칭 지원

기타

  1. 병렬 컴파일 지원
  2. 새로운 동시성 안전 sync.Map 추가

1.8

첫 릴리스: 2017-02-16

최신 업데이트: go1.8.7 (released 2018-02-07)

go1.8 버전의 자세한 업데이트 로그는 Go 1.8 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.8 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 두 구조체 간 타입 변환 시 구조체 tag 차이 무시

    go
    func example() {
        type T1 struct {
            X int `json:"foo"`
        }
        type T2 struct {
            X int `json:"bar"`
        }
        var v1 T1
        var v2 T2
        v1 = T1(v2) // now legal
    }

기타

  1. GC 로 인한 일시 중지 시간이 10 마이크로초 이하로 감소, 대부분의 경우 100 마이크로초 이하 (거의 모든 버전에서 Go 가 GC 개선을 위해 노력하고 있음을 알 수 있음)
  2. defer 호출 오버헤드가 약 절반 감소
  3. Go 가 C 를 호출하는 오버헤드가 약 절반 감소
  4. map 의 동시성 사용 감지 최적화

1.7

첫 릴리스: 2016-08-15

최신 업데이트: go1.7.6 (released 2017-05-23)

go1.7 버전의 자세한 업데이트 로그는 Go 1.7 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.7 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

  1. golang.org/x/net/context 를 표준 라이브러리에 추가
  2. 1.6 대비 GC 시간 대폭 단축
  3. testing 패키지가 서브 테스트 지원

1.6

첫 릴리스: 2016-02-17

최신 업데이트: go1.6.4 (released 2016-12-01)

go1.6 버전의 자세한 업데이트 로그는 Go 1.6 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.6 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

이 버전에는 문법 변경이 없음, 중요한 변경사항은 다음과 같음

  1. map 에 대한 동시성 사용 감지, map 이 동시성으로 사용 중인 것이 감지되면 fatal 발생
  2. panic 발생 시 실행 중인 goroutine 의 호출 스택만 인쇄
  3. HTTP/2 지원

1.5

첫 릴리스: 2015-08-19

최신 업데이트: go1.5.4 (released 2016-04-12)

go1.5 버전의 자세한 업데이트 로그는 Go 1.5 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.5 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. map 리터럴의 키 초기화 시 요소 타입 생략 허용

    go
    m := map[Point]string{
        Point{29.935523, 52.891566}:   "Persepolis",
        Point{-25.352594, 131.034361}: "Uluru",
        Point{37.422455, -122.084306}: "Googleplex",
    }
    
    // 타입 생략
    m := map[Point]string{
        {29.935523, 52.891566}:   "Persepolis",
        {-25.352594, 131.034361}: "Uluru",
        {37.422455, -122.084306}: "Googleplex",
    }

기타

  1. 런타임 및 컴파일러가 완전히 Go 로 재작성, 더 이상 C 코드 포함 안 함
  2. 동시성 가비지 컬렉션 지원, 프로그램 일시 중지 시간 대폭 감소
  3. GOMAXPROCS 기본값이 머신의 논리 코어 수로 변경
  4. internal 패키지의 시맨틱이 모든 곳에 적용 가능, 더 이상 Go 소스 패키지에만 국한되지 않음
  5. vendor 의존성 관리 실험적 지원 (의존성 관리 부분에 대한 작업 시작)

1.4

첫 릴리스: 2014-12-10

최신 업데이트: go1.4.3 (released 2015-09-22)

go1.4 버전의 자세한 업데이트 로그는 Go 1.4 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.4 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. for range 루프가 하나의 이터레이션 파라미터를 가질 수 있음

    for i := range x {
        ...
    }

    하지만 하나도 없는 것은 허용되지 않음

  2. 이중 참조 타입의 메서드를 호출할 때 자동으로 역참조하지 않음

    go
    type T int
    func (T) M() {}
    var x **T
    
    // 허용되지 않음
    x.M()

기타

  1. 1.4 이전에는 Go 런타임이 C 로 작성되었으나, 이제는 모두 Go 로 완성됨
  2. 패키지 이름을 internal 로 변경하여 해당 패키지의 모든 내용이 비공개이며 내보낼 수 없음을 나타낼 수 있음

1.3

첫 릴리스: 2014-06-18

최신 업데이트: go1.3.3 (released 2014-09-30)

go1.3 버전의 자세한 업데이트 로그는 Go 1.3 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.3 - Release Patch 에서 확인할 수 있습니다.

중요 변경사항

이 버전에는 문법 변경이 없음, 중요한 변경사항은 다음과 같음

  1. goroutine 스택 모델이 세그먼트 스택에서 연속 스택으로 변경, 스택 확장 성능 향상
  2. 가비지 컬렉터의 포인터 판별 정밀도 향상
  3. 작은 용량 map 에서 이터레이션 시 순서도 예측 불가능해짐
  4. 런타임 측면의 개선으로 현재 버전의 Go 프로그램 성능이 상당히 향상됨

1.2

첫 릴리스: 2013-12-01

최신 업데이트: go1.2.2 (released 2014-05-05)

go1.2 버전의 자세한 업데이트 로그는 Go 1.2 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.2 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. nil 값인 변수에 대한 연산이 panic 발생

  2. 슬라이스를 분할할 때 세 번째 파라미터로 분할된 슬라이스 용량 제한 가능, 더 안전하게 슬라이스 사용

    go
    var array [10]int
    slice := array[2:4:4]

기타

  1. goroutine 스택의 최소 메모리 크기가 4KB 에서 8KB 로 증가

  2. 최대 스레드 수가 10000 으로 제한됨

  3. 장기간 실행되는 goroutine 이 함수 호출 시 선점됨 (협력적 선점 첫 도입)

1.1

첫 릴리스: 2013-05-13

최신 업데이트: go1.1.2 (released 2013-08-13)

go1.1 버전의 자세한 업데이트 로그는 Go 1.1 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.1 - Release Patch 에서 확인할 수 있습니다.

언어 측면

  1. 숫자를 0 으로 나누기 전 panic 발생, 1.1 에서는 컴파일조차 통과하지 못함
  2. 메서드가 값으로 존재할 수 있음
  3. 종료문 개념 도입, 함수 반환 규칙이 더 완화됨, 종료문의 정의 - go-sepc

성능 측면

  1. go1.1 도구로 컴파일된 Go 프로그램 성능이 약 30%-40% 향상

기타:

  1. 64 비트 머신에서 힙 메모리 최댓값이 수십 GB 로 증가
  2. 교차 컴파일 시 기본적으로 cgo 비활성화

1.0

첫 릴리스: 2012-03-28

go1.0 버전의 자세한 업데이트 로그는 Go 1.0 Release Notes 에서 확인할 수 있으며, 유지보수 기간 동안 릴리스된 모든 패치 버전은 Go1.0 - Release Patch 에서 확인할 수 있습니다.

언어 측면

미리보기 버전과 비교하여 문법에 다음과 같은 내용 추가

  1. 새로운 내장 append 함수 추가, 슬라이스에 요소 추가용

  2. 새로운 내장 close 함수 추가, 파이프 닫기용

  3. 복합 시맨틱, 슬라이스, map, 구조체 리터럴 요소 초기화 시 타입 생략 가능

    go
    // 타입 선언
    holiday1 := []Date{
        Date{"Feb", 14},
        Date{"Nov", 11},
        Date{"Dec", 25},
    }
    
    // 타입 생략
    holiday2 := []Date{
        {"Feb", 14},
        {"Nov", 11},
        {"Dec", 25},
    }
  4. init 함수에서 사용된 goroutine 이 바로 시작되며, 더 이상 모든 패키지가 초기화完毕일 때까지 기다릴 필요 없음

  5. 새로운 rune 타입 추가, UTF-8 문자 표시

  6. 새로운 error 내장 인터페이스 추가, 오류 타입 표시

  7. 새로운 delete 내장 함수 추가, map 에서 키 - 값 쌍 삭제용

  8. for range 로 map 이터레이션 시 순서가 예측 불가능해짐

  9. 여러 변수에 동시 할당 지원

    a := 1
    b := 2
    a, b = 3, 4
  10. 변수 숨김 문제: 함수에 이름 있는 반환 값이 있을 때 반환 값이 숨겨지면 return 문에 반환 값이 있어야 함, 그렇지 않으면 컴파일 오류

    go
    func Bug() (i, j, k int) {
        for i = 0; i < 5; i++ {
            for j := 0; j < 5; j++ { // j 재선언
                k += i * j
                if k > 100 {
                    return // 거부됨: j 가 여기서 숨겨짐
                }
            }
        }
        return // OK: j 가 여기서 숨겨지지 않음
    }
  11. 비공개 필드가 있는 구조체 값 복사 허용

  12. 구조체와 슬라이스가 모두 비교 가능한 요소로 구성된 경우 map 의 키로 사용할 수 있음, 동시에 함수와 map 의 비교 가능성 제거

언어 측면 외에도 go1.0 은 패키지 구성 방식, 표준 라이브러리 및 명령줄 측면에서 미리보기 버전과 비교하여 매우 큰 변화가 있었으나, 내용이 너무 많아 여기서는 더 이상 자세히 설명하지 않겠습니다. 관심이 있으시면 공식 웹사이트에서 직접 확인하세요.

pre

go1 이 정식 릴리스되기 전의 모든 버전은 미리보기 버전으로 불리며, 이러한 미리보기 버전에 대해 공식은 매주 스냅샷 버전을 릴리스했습니다. 그 중 중요한 버전은 다음과 같습니다.

  • r60(2011-09-07), else 블록에 이제 괄호가 있어야 함을 규정
  • r59(2011-08-01), 새로운 구조체 tag方案设计
  • r58(2011-06-29), goto 남용으로 인한 메모리 초기화되지 않은 문제 수정, gui, exec 패키지 추가
  • r57(2011-05-03), 짧은 변수 다중 할당 문법 지원, http, reflect 패키지 재설계, gotest 를 shell 스크립트가 아닌 Go 프로그램으로 변경
  • r56(2011-03-07), 첫 번째 안정 버전

미리보기 버전 개발은 2009 년 12 월 09 일에 시작되어 go1 이 2012 년 3 월 28 일에 정식 릴리스된 후 중단되었으며, 약 3 년 동안 지속되었습니다. 이후로는 매주 스냅샷 버전을 더 이상 기록하지 않습니다. 이러한 주요 버전 정보는 Pre-Go 1 Release History 에서 확인하세요. 모든 미리보기 버전의 매주 스냅샷 버전 정보는 Weekly Snapshot History 에서 확인하세요.

Golang by www.golangdev.cn edit