Go 1.27 인터랙티브 투어

9 hours ago 4

이번 릴리스는 제네릭 메서드를 중심으로 구조체 리터럴과 타입 추론을 개선하고, 표준 라이브러리·런타임·도구 체계까지 폭넓게 확장함 80바이트 미만 일부 할당은 최대 30% 빨라지고, 할당이 많은 실제 프로그램은 약 1% 성능 향상이 예상되지만 바이너리는 약 60KB 커짐 encoding/json/v2, 표준 uuid 패키지, ML-DSA 양자내성 서명, 고루틴 누수 프로파일 등 실무 기능이 정식 제공됨 실험적 simd 패키지와 합성 시간 기반의 synctest.Sleep, 메모리 기반 HTTP 테스트 서버가 고성능 처리와 결정론적 테스트를 지원함 타이머 채널의 비버퍼링 고정, HTTP 응답 본문 자동 소진, //go:linkname 제한 강화처럼 기존 동작에 영향을 주는 변경이 있어 조기 호환성 검사가 필요함 언어와 타입 시스템 Go 1.27의 핵심인 제네릭 메서드는 리시버와 독립적인 자체 타입 매개변수를 선언할 수 있음 이전에는 제네릭 연산을 최상위 함수로 작성해야 했지만, 이제 Box[T].Map[U]처럼 다른 원소 타입으로 변환하는 연산을 타입의 메서드로 둘 수 있음 인터페이스는 여전히 타입 매개변수 메서드를 선언할 수 없으며, 제네릭 메서드로 인터페이스를 구현할 수도 없음 구조체 리터럴의 키로 최상위 필드뿐 아니라 유효한 필드 선택자를 사용할 수 있음 임베드된 Base의 승격 필드 ID를 User{ID: 7}처럼 직접 초기화할 수 있음 제네릭 함수의 타입 추론이 변수 대입뿐 아니라 변환과 복합 리터럴에도 적용됨 []func([]int) int{first, last}에서는 슬라이스 원소 타입을 바탕으로 각 함수의 T=int를 추론함 런타임 성능과 진단 컴파일러가 크기별 특화 메모리 할당 루틴을 호출함 80바이트 미만 일부 할당 비용은 최대 30% 줄고, 할당이 많은 실제 프로그램의 전체 개선 폭은 약 1%로 예상됨 워크로드와 무관하게 바이너리는 약 60KB 커짐 코드 변경은 필요 없으며 GOEXPERIMENT=nosizespecializedmalloc로 끌 수 있지만, 이 선택지는 Go 1.28에서 제거될 예정임 go.mod가 Go 1.27 이상인 모듈은 traceback의 고루틴 헤더에 runtime/pprof 고루틴 레이블을 표시함 pprof.Do로 지정한 레이블이 충돌 덤프, SIGQUIT, runtime.Stack 출력에도 {request: 42} 형태로 나타남 민감한 레이블 노출을 막으려면 GOD...

Read Entire Article