Line data Source code
1 : // Package util は pointerに関する軽ユーティリティです
2 : package util
3 :
4 : // Clone は与えられたポインタの値をコピーして新しいポインタを返します。
5 : // nil の場合は nil を返します。
6 0 : func Clone[T any](in *T) *T {
7 0 : if in == nil {
8 0 : return nil
9 0 : }
10 0 : v := *in
11 0 : return &v
12 : }
13 :
14 : // ToPtr は値をポインタ化します。
15 : // 例: util.ToPtr("foo") → *string("foo")
16 0 : func ToPtr[T any](v T) *T {
17 0 : return &v
18 0 : }
19 :
20 : // Deref はポインタを値に戻します。nil の場合はゼロ値を返します。
21 0 : func Deref[T any](p *T) T {
22 0 : if p == nil {
23 0 : var zero T
24 0 : return zero
25 0 : }
26 0 : return *p
27 : }
|