diff --git a/ptr.go b/ptr.go index 406f720..24005f1 100644 --- a/ptr.go +++ b/ptr.go @@ -17,3 +17,12 @@ package ekit func ToPtr[T any](t T) *T { return &t } + +// DerefPtr 做空指针安全的解引用:nil 返回零值。 +func DerefPtr[T any](ptr *T) T { + if ptr == nil { + var zero T + return zero + } + return *ptr +} diff --git a/ptr_test.go b/ptr_test.go index edcacc2..747634e 100644 --- a/ptr_test.go +++ b/ptr_test.go @@ -25,3 +25,13 @@ func TestToPtr(t *testing.T) { res := ToPtr[int](i) assert.Equal(t, &i, res) } + +func TestDerefPtr(t *testing.T) { + i := 12 + valueI := DerefPtr(&i) + assert.Equal(t, 12, valueI) + + var ptrJ *string + valueJ := DerefPtr(ptrJ) + assert.Equal(t, "", valueJ) +}