Updated:

less than 1 minute read

개요

  • 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