Go 1.27 대화형 투어

1 week ago 19

이번 릴리스는 제네릭 메서드를 중심으로 구조체 리터럴과 타입 추론을 개선하고, 표준 라이브러리·런타임·도구 체인 전반에 실용적인 기능을 더함 크기 특화 메모리 할당으로 80바이트 미만인 일부 할당 비용을 최대 30% 줄이며, 할당 집약형 프로그램에서는 약 1%의 성능 향상과 약 60KB의 바이너리 증가가 예상됨 encoding/json/v2가 정식 제공되고 기존 encoding/json도 내부적으로 v2를 사용하며, 표준 UUID 패키지와 FIPS 204 기반 ML-DSA 서명이 추가됨 goroutineleak 프로필, traceback의 pprof 레이블, 가상 시간용 synctest.Sleep, 메모리 내 HTTP 테스트 서버로 진단과 동시성 테스트가 쉬워짐 타이머 채널의 비버퍼화, HTTP 응답 본문 자동 소진, //go:linkname 제한 강화는 기존 코드에 영향을 줄 수 있어 Go 1.27 전환 전 호환성 검사가 필요함 언어와 타입 시스템 Go 1.27의 핵심인 제네릭 메서드는 리시버와 독립적인 자체 타입 매개변수를 선언할 수 있음 이전에는 최상위 함수만 제네릭일 수 있어 타입에 속하는 연산도 패키지 함수로 작성해야 했음 Box[T].Map[U]처럼 입력과 다른 요소 타입을 반환하는 연산을 메서드로 정의할 수 있음 인터페이스는 여전히 타입 매개변수 메서드를 선언할 수 없으며, 제네릭 메서드로 인터페이스를 구현할 수도 없음 구조체 리터럴 키에 최상위 필드명뿐 아니라 유효한 필드 선택자를 사용할 수 있음 임베디드 구조체에서 승격된 필드를 User{ID: 7}처럼 직접 초기화할 수 있음 함수 타입 추론이 변환과 복합 리터럴까지 확대됨 []func([]int) int{first, last}처럼 기대되는 함수 타입을 바탕으로 제네릭 함수의 타입 인자를 추론함 이전에는 first[int], last[int]처럼 직접 인스턴스화해야 했음 런타임과 성능 컴파일러가 크기 특화 할당 루틴을 호출해 80바이트 미만인 일부 메모리 할당 비용을 최대 30% 절감함 실제 할당 집약형 프로그램의 전체 성능 향상은 약 1%로 예상됨 코드 수정은 필요 없지만 작업 부하와 무관하게 바이너리가 약 60KB 커짐 GOEXPERIMENT=nosizespecializedmalloc으로 비활성화할 수 있으나 이 선택지는 Go 1.28에서 제거될 예정임 기본 활성화되는 컴파일러 최적화 세 가지가 추가됨 값에서 확실히 0 또는 1인 비트를 추적...

Read Entire Article