1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00
Files
lancet/pointer/pointer.go
2023-06-02 11:48:17 +08:00

32 lines
703 B
Go

// Copyright 2023 dudaodong@gmail.com. All rights reserved.
// Use of this source code is governed by MIT license.
// Package pointer contains some util functions to operate go pointer.
package pointer
import "reflect"
// Of returns a pointer to the value `v`.
// Play: todo
func Of[T any](v T) *T {
return &v
}
// Unwrap returns the value from the pointer.
// Play: todo
func Unwrap[T any](p *T) T {
return *p
}
// ExtractPointer returns the underlying value by the given interface type
// Play: todo
func ExtractPointer(value any) any {
t := reflect.TypeOf(value)
v := reflect.ValueOf(value)
if t.Kind() != reflect.Pointer {
return value
}
return ExtractPointer(v.Elem().Interface())
}