chore: move '/internal/pkg' to '/pkg'
This commit is contained in:
28
pkg/utils/types/assert.go
Normal file
28
pkg/utils/types/assert.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
)
|
||||
|
||||
// 判断对象是否为 nil。
|
||||
// 与直接使用 `obj == nil` 不同,该函数会正确判断接口类型对象的真实值是否为空。
|
||||
//
|
||||
// 入参:
|
||||
// - value:待判断的对象。
|
||||
//
|
||||
// 出参:
|
||||
// - 如果对象值为 nil,则返回 true;否则返回 false。
|
||||
func IsNil(obj any) bool {
|
||||
if obj == nil {
|
||||
return true
|
||||
}
|
||||
|
||||
v := reflect.ValueOf(obj)
|
||||
if v.Kind() == reflect.Ptr {
|
||||
return v.IsNil()
|
||||
} else if v.Kind() == reflect.Interface {
|
||||
return v.Elem().IsNil()
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
47
pkg/utils/types/cast.go
Normal file
47
pkg/utils/types/cast.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
)
|
||||
|
||||
// 将对象转换为指针。
|
||||
//
|
||||
// 入参:
|
||||
// - 待转换的对象。
|
||||
//
|
||||
// 出参:
|
||||
// - 返回对象的指针。
|
||||
func ToPtr[T any](v T) (p *T) {
|
||||
return &v
|
||||
}
|
||||
|
||||
// 将非零值的对象转换为指针。
|
||||
// 与 [ToPtr] 不同的是,如果对象的值为零值,则返回 nil。
|
||||
//
|
||||
// 入参:
|
||||
// - 待转换的对象。
|
||||
//
|
||||
// 出参:
|
||||
// - 返回对象的指针。
|
||||
func ToPtrOrZeroNil[T any](v T) (p *T) {
|
||||
if reflect.ValueOf(v).IsZero() {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &v
|
||||
}
|
||||
|
||||
// 将指针转换为对象。
|
||||
//
|
||||
// 入参:
|
||||
// - 待转换的指针。
|
||||
//
|
||||
// 出参:
|
||||
// - 返回指针指向的对象。如果指针为空,则返回对象的零值。
|
||||
func ToVal[T any](p *T) (v T) {
|
||||
if IsNil(p) {
|
||||
return v
|
||||
}
|
||||
|
||||
return *p
|
||||
}
|
||||
Reference in New Issue
Block a user