콘텐츠로 이동

v1.10.3

릴리스 날짜: 2026-08-01 - GitHub Release

stringx: n이 음수일 때 FirstN이 빈 문자열을 반환하도록 수정 (#5620)

섹션 제목: “stringx: n이 음수일 때 FirstN이 빈 문자열을 반환하도록 수정 (#5620)”

FirstN은 음수인 n과 절대 같아질 수 없는 counter로 rune을 순회했기 때문에, 빈 문자열 대신 전체 입력 문자열을 조용히 반환했습니다. 이제 다음과 같이 조기 반환 가드가 추가되어 음수 길이에 대해 예측 가능하게 동작합니다.

if n < 0 {
return ""
}

stringx: slice panic 방지를 위해 Substr에서 start > stop을 거부 (#5616)

섹션 제목: “stringx: slice panic 방지를 위해 Substr에서 start > stop을 거부 (#5616)”

Substrstartstop을 각각 [0, length] 범위로 검증했지만 start <= stop 여부는 확인하지 않았습니다. Substr("hello", 3, 2)와 같은 호출은 두 검증을 모두 통과해 rs[3:2]에서 panic이 발생했습니다. 이제 start > stop은 유효하지 않은 stop position으로 처리되어 panic 대신 ErrInvalidStopPosition을 반환합니다.

mapping: pointer-to-slice 필드의 unmarshal 오류 수정 (#5662)

섹션 제목: “mapping: pointer-to-slice 필드의 unmarshal 오류 수정 (#5662)”

httpx.Parse*[]uint64와 같은 pointer-to-slice 필드를 제대로 unmarshal하지 못했습니다. fillSlicefieldType.Elem()을 사용했는데, *[]T의 경우 T가 아니라 []T로 해석되어 [9000, 9001]과 같은 JSON 배열에서 타입 불일치 오류가 발생했습니다. 이제 slice element type을 해석하기 전에 field type의 pointer를 역참조합니다.

redis: 높은 동시성 상황에서 circuit breaker가 잘못 동작하던 문제 수정 (#5654)

섹션 제목: “redis: 높은 동시성 상황에서 circuit breaker가 잘못 동작하던 문제 수정 (#5654)”

DisableIdentityProtocol 필드가 이제 go-redis로 전달되며, 오픈소스 Redis에서 CLIENT MAINT_NOTIFICATIONS 명령을 지원하지 않으므로 MaintNotifications는 기본적으로 비활성화됩니다. 이를 통해 높은 동시성 상황이나 호환되지 않는 Redis server에서 circuit breaker가 잘못 트립되던 문제가 해결되었습니다.

core/collection.Queue는 이전에 queue가 가득 찰 때마다 초기 queue 크기만큼 내부 slice를 늘렸는데, 초기 용량이 작을 경우 O(n²)의 전체 복사 비용이 발생했습니다. 새 구현은 Go slice와 유사한 growth curve를 사용합니다 — 작은 queue는 두 배로, 큰 queue는 점진적으로 1.25배로 증가합니다 — 동시에 wrap된 ring buffer의 FIFO 순서를 유지하고, dequeue된 slot을 비워 GC가 참조된 객체를 회수할 수 있게 하며, 0 이하의 초기 용량은 즉시 거부합니다.

stream에서 consumer group의 마지막 전달 ID를 갱신하는 새 method가 추가되었습니다.

lastID, err := client.XGroupSetIDCtx(ctx, "mystream", "mygroup", "$")
  • go-redis/v9 9.19.0 → 9.21.0
  • mongo-driver/v2 2.6.0 → 2.8.0
  • pelletier/go-toml/v2 2.3.1 → 2.4.3

전체 변경 로그: https://github.com/zeromicro/go-zero/compare/v1.10.2…v1.10.3