[Go] unique package
Updated:
개요
- go1.23.0부터 사용 가능
- Documentation
- 비교 가능한 값을 표준화(interning, hash-consing)하기 위한 기능을 제공
type Handle[T comparable] struct
- T 유형의 일부 값에 대한 전역적으로 고유한 ID
func Make[T comparable](value T) Handle[T]
- T 유형의 값에 대한 전역적으로 고유한 핸들을 반환
func (h Handle[T]) Value() T
- Handle을 생성한 T 값의 얕은 사본을 반환
- 두 핸들은 핸들을 생성하는 데 사용된 값이 동일한 경우에만 동일
- 값을 중복 제거 및 메모리 공간 확보 가능
- 두 핸들을 비교하는 것은 간단한 포인터 비교로 축소되어 핸들을 만드는 데 사용된 값을 비교하는 것보다 훨씬 효율적
예제
- 코드
-
package main import ( "unique" ) func main() { type T01 struct { i int } handle01 := unique.Make(T01{i: 1}) println("~~~ 1 :", handle01.Value().i) handle02 := unique.Make(T01{i: 1}) println("~~~ 2 :", handle02.Value().i) handle03 := unique.Make(T01{i: 2}) println("~~~ 3 :", handle03.Value().i) println("~~~ 4 :", handle01 == handle02) println("~~~ 5 :", handle01 == handle03) }
-
- 실행 결과
-
~~~ 1 : 1 ~~~ 2 : 1 ~~~ 3 : 2 ~~~ 4 : true ~~~ 5 : false
-