diff --git a/safeptr.go b/safeptr.go new file mode 100644 index 00000000..56c656df --- /dev/null +++ b/safeptr.go @@ -0,0 +1,30 @@ +//go:build go1.21 +// +build go1.21 + +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package klog + +// SafePtr accepts a pointer of any type (T) as an argument and returns th +// same pointer if it's not nil, otherwise it returns nil. +// This function is useful for safely handling pointers and preventing nil pointer dereferencing. +func SafePtr[T any](p *T) any { + if p == nil { + return nil + } + return p +} diff --git a/safeptr_test.go b/safeptr_test.go new file mode 100644 index 00000000..b1d91a54 --- /dev/null +++ b/safeptr_test.go @@ -0,0 +1,41 @@ +//go:build go1.21 +// +build go1.21 + +/* +Copyright 2023 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package klog_test + +import ( + "testing" + + "k8s.io/klog/v2" +) + +func TestSafePtr(t *testing.T) { + // Test with nil pointer + var stringPtr *string = nil + if result := klog.SafePtr(stringPtr); result != nil { + t.Errorf("Expected nil, got %p", result) + } + + // Test with non-nil pointer + expected := "foo" + stringPtr = &expected + if result := klog.SafePtr(stringPtr); result != stringPtr { + t.Errorf("Expected %v, got %v", stringPtr, result) + } +}