Go 1.27 대화형 투어

2 days ago 9

이번 릴리스는 제네릭 메서드를 중심으로 구조체 리터럴과 타입 추론을 개선하고, 표준 라이브러리·런타임·도구 체인 전반에 실용적인 기능을 더함 크기 특화 메모리 할당으로 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