golang标准库unsafe学习
  Adknp2DJyaqB 2023年11月02日 55 0

golang标准库unsafe学习

新建unsafe.go

package unsafe

import (
	"fmt"
	"unsafe"
)

type Test struct {
	Id   int64
	Name string
	Age  int
}

func UnSafeFunc() {
	test := Test{
		1,
		"test",
		15,
	}

	//返回结构体大小
	sizeof := unsafe.Sizeof(test)
	fmt.Println(sizeof)

	//返回结构体字段对齐大小
	alignof := unsafe.Alignof(test.Id)
	fmt.Println(alignof)

	//返回结构体字段相对于开始的偏移量
	iof := unsafe.Offsetof(test.Id)
	nof := unsafe.Offsetof(test.Name)
	aof := unsafe.Offsetof(test.Age)
	fmt.Println(iof, nof, aof)

	sb := "1ssdfsdfsdfsd"
	//返回字符串首字母byte指针
	sby := unsafe.StringData(sb)
	fmt.Println(sby)          //byte指针
	fmt.Println(*sby)         //byte数据
	fmt.Println(string(*sby)) //字符数据
	//返回从sb开始的切片,
	//如果长度在sb长度内,返回的都是sb的切片,如果大于sb长度可以返回其他非sb数据。
	//按50长度返回如下 1ssdfsdfsdfsd3814697265625: unknown pc === NAME  %
	//如果是0返回空
	sbs := unsafe.Slice(sby, 50)
	fmt.Println(sbs)
	fmt.Println(string(sbs))

	var bs []byte = []byte("ikejwrwe34")
	bss := unsafe.SliceData(bs)
	fmt.Println(bss)          //byte指针
	fmt.Println(*bss)         //byte数据
	fmt.Println(string(*bss)) //字符数据
	bssb := unsafe.String(bss, len(bs))
	fmt.Println(bssb)
	bssb = unsafe.String(bss, 100)
	fmt.Println(bssb)
}

// 字符串转byte
func StringToByteArray(s string) []byte {
	return unsafe.Slice(unsafe.StringData(s), len(s))
}

// byte转字符串
func ByteArrayToString(b []byte) string {
	return unsafe.String(unsafe.SliceData(b), len(b))
}

新建unsafe_test.go

package unsafe

import (
	"fmt"
	"testing"
)

func TestUnSafeFunc(t *testing.T) {
	UnSafeFunc()
	bt := StringToByteArray("wioeruwieour")
	fmt.Println(bt)

	st := ByteArrayToString([]byte("8932789423uhjsdf"))
	fmt.Println(st)
}

然后目录下执行

go test -v
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jE8iBWyhLcsg   2023年11月02日   46   0   0 javasubstringgolang
  Adknp2DJyaqB   2023年11月02日   56   0   0 unsafegolang
  Adknp2DJyaqB   2023年11月02日   34   0   0 unicodegolang
  Ohl6n170bzPf   2023年11月02日   26   0   0 golang
  Adknp2DJyaqB   2023年11月13日   20   0   0 restfulgrpcgolang
  Adknp2DJyaqB   2023年11月13日   30   0   0 发布订阅grpcgolang
  Adknp2DJyaqB   2023年11月02日   31   0   0 golang
  Adknp2DJyaqB   2023年11月02日   33   0   0 golangmilvus
  Adknp2DJyaqB   2023年11月13日   23   0   0 grpcgolang
Adknp2DJyaqB