golang指针的使用,类似C语言

golang指针的使用,类似C语言,第1张

概述src\model\model.go package modelimport "strconv"type User struct { username string password string age int32}func (this *User) String() string { return "username: " + this.username + " pass


src\model\model.go

package modelimport "strconv"type User struct {	username string	password string	age int32}func (this *User) String() string {	return "username: " + this.username + " password: " + this.password + " age:" + strconv.Itoa(int(this.age))}

注意,User的所有属性都是私有的

当我们创建 u := &User{}的时候,有没有办法将其属性赋值?


src\main\main.go

package mainimport (	"fmt"	. "model"	"unsafe"	"reflect")//type Sliceheader struct {//	Data uintptr//	Len  int//	Cap  int//}func main() {	var size int	var str string	size = int(unsafe.Sizeof(str))	fmt.Println(size) 	// 16	u := &User{} // User的所有成员变量都是private	fmt.Println("u :",u)	size= int(unsafe.Sizeof(*u))	fmt.Println(size)	// 可以将其理解为,指想固定地址,并有长度的[]byte	header := &reflect.Sliceheader {		Data : uintptr(unsafe.Pointer(u)),Len	 : size,Cap  : size,}	b := *(*[]byte)(unsafe.Pointer(header))	println(len(b))	//12	fmt.Println(b)	//[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]	age := 27	size = int(unsafe.Sizeof(&age))	header = &reflect.Sliceheader {		Data : uintptr(unsafe.Pointer(&age)),}	b2 := *(*[]byte)(unsafe.Pointer(header))	fmt.Println(b2)	b[16 + 16] = b2[0]	b[16 + 16 + 1] = b2[1]	b[16 + 16 + 2] = b2[2]	b[16 + 16 + 3] = b2[3]	b[16 + 16 + 4] = b2[4]	b[16 + 16 + 5] = b2[5]	b[16 + 16 + 5] = b2[6]	b[16 + 16 + 7] = b2[7]	fmt.Println(b)	fmt.Println("u :",u)}

进入src同级目录

export GOPATH=`pwd`

go install main

./bin/main



输出

16
u : username: password: age:0
40
40
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[27 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0]
u : username: password: age:27


不建议,修改string属性,如果非要修改,建议将User中的username和password string类型,修改为 [32]byte.

理解思路同,C语言.尤其是C++中对共享内存数据的处理.

总结

以上是内存溢出为你收集整理的golang指针的使用,类似C语言全部内容,希望文章能够帮你解决golang指针的使用,类似C语言所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1290811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存