From 7a28da5131f17f7cea25b0baff799ceae452de49 Mon Sep 17 00:00:00 2001 From: "david.wong" Date: Tue, 22 Jul 2025 17:07:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?*=20update=201.=20=E5=A2=9E=E5=8A=A0DerefPt?= =?UTF-8?q?r=E6=B3=9B=E5=9E=8B=E8=A7=A3=E5=BC=95=E7=94=A8=E5=87=BD?= =?UTF-8?q?=E6=95=B0;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * DerefPtr对于传入的指针进行安全的指针解引用,若引用指针为nil则返回该类型的空值,实现一些指针字段传递时不用多写一段判空的逻辑; --- ptr.go | 8 ++++++++ ptr_test.go | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/ptr.go b/ptr.go index 406f720a..d4d6c215 100644 --- a/ptr.go +++ b/ptr.go @@ -17,3 +17,11 @@ package ekit func ToPtr[T any](t T) *T { return &t } + +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 edcacc2d..747634e6 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) +} From 4e8b78cea68fe80983ed533a325aea8ca3fe228a Mon Sep 17 00:00:00 2001 From: "david.wong" Date: Tue, 22 Jul 2025 17:10:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?*=20update=201.=20=E5=A2=9E=E5=8A=A0DerefPt?= =?UTF-8?q?r=E6=B3=9B=E5=9E=8B=E8=A7=A3=E5=BC=95=E7=94=A8=E5=87=BD?= =?UTF-8?q?=E6=95=B0;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * DerefPtr对于传入的指针进行安全的指针解引用,若引用指针为nil则返回该类型的空值,实现一些指针字段传递时不用多写一段判空的逻辑; --- ptr.go | 1 + 1 file changed, 1 insertion(+) diff --git a/ptr.go b/ptr.go index d4d6c215..24005f19 100644 --- a/ptr.go +++ b/ptr.go @@ -18,6 +18,7 @@ func ToPtr[T any](t T) *T { return &t } +// DerefPtr 做空指针安全的解引用:nil 返回零值。 func DerefPtr[T any](ptr *T) T { if ptr == nil { var zero T