golang 指针 - Go语言中文社区

golang 指针


C语言指针: https://blog.csdn.net/weixin_40165163/article/details/84338004 

学习golang的时候发现没有引用类型可以用,会有一些代码写的很丑!所以这里学习了解一下C语言和golang指针之间的区别

首先是引发问题的代码:

package main

import "fmt"

type user struct {
	name string
	age  int
}

func main() {
	userInfo := user{"张三", 20}
	fmt.Println(userInfo)
	updateUserInfo(userInfo)
	fmt.Println(userInfo)

}

func updateUserInfo(userInfo user) {
	userInfo.name = "王二"
	userInfo.age = 15
}

运行结果如下: 

这里可以发现因为传递的数据类型是 struct 值类型在很多其他语言中我们也应该有所了解, 所以值当然不会改变,但是golang没有引用类型的概念。

接下来的代码是我未了解指针的时候所临时想到的补救方法:

package main

import "fmt"

type user struct {
	name string
	age  int
}

func main() {
	userInfo := user{"张三", 20}
	fmt.Println(userInfo)
	userInfo = updateUserInfo(userInfo)
	fmt.Println(userInfo)

}

func updateUserInfo(userInfo user) user {
	userInfo.name = "王二"
	userInfo.age = 15
	return userInfo
}

可以看到值改变了,不过此种方式已经更换了对象的地址,原来的对象已经被抛弃掉了。 

 

 下面的代码是使用golang中带有的指针概念。

package main

import "fmt"

type user struct {
	name string
	age  int
}

func main() {
	userInfo := user{"张三", 20}
	fmt.Println(userInfo)
	updateUserInfo(&userInfo)
	fmt.Println(userInfo)

}

func updateUserInfo(userInfo *user) {
	userInfo.name = "王二"
	userInfo.age = 15
}

可以看到通过指针我们就不需要在将user struct return回来了。而是真真切切的修改原有struct的值,当然也不会丢弃掉原有对象。 但是这里是会产生一个存有 userInfo地址的指针对象。 

如果只是使用到此种地步的话,感觉是类似于C#中ref,对于值类型的变量进行修改。

 下面的Blog 对于golang 和C的指针有更多的例子: https://blog.csdn.net/zhjih123/article/details/38961661 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_40165163/article/details/89365390
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-24 22:22:24
  • 阅读 ( 1018 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢