From 867d1ecf82d95cc1f468bf190d1018367c1362ef Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Thu, 27 Jul 2023 18:24:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20super=20=E5=8C=85=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20Convert=20=E5=BC=BA=E5=88=B6=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/super/unsafe.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/utils/super/unsafe.go b/utils/super/unsafe.go index 3383101..e0d38d5 100644 --- a/utils/super/unsafe.go +++ b/utils/super/unsafe.go @@ -1,11 +1,22 @@ package super -import "unsafe" +import ( + "unsafe" +) +// StringToBytes 以零拷贝的方式将字符串转换为字节切片 func StringToBytes(s string) []byte { return unsafe.Slice(unsafe.StringData(s), len(s)) } +// BytesToString 以零拷贝的方式将字节切片转换为字符串 func BytesToString(b []byte) string { return unsafe.String(&b[0], len(b)) } + +// Convert 以零拷贝的方式将一个对象转换为另一个对象 +// - 两个对象字段必须完全一致 +// - 该函数可以绕过私有字段的访问限制 +func Convert[A, B any](src A) B { + return *(*B)(unsafe.Pointer(&src)) +}