chore: move '/internal/pkg' to '/pkg'

This commit is contained in:
Fu Diwei
2025-06-17 15:54:21 +08:00
parent 30840bbba5
commit 205275b52d
611 changed files with 693 additions and 693 deletions

28
pkg/utils/types/assert.go Normal file
View 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
View 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
}