golang 什么时候使用指针


本文摘自php中文网,作者(*-*)浩,侵删。

有时候看别人的go代码,发现他们有的在代码里面用了指针,有的不使用。

假设有个结构体类型叫做Person,发现有些方法会用func methodA (*person Person)作为参数,或者使用 func *(person Person) methodA()作为结构体自己的方法,也就是person这个结构体 (推荐学习:go)

可以直接调用methodA,但是用的是指针。

或者在map结构里面看到var personMap map[string]*Person 的用法

如果是从java转过来golang的话,可能不太好理解。因为java的世界是没有指针的,直接传递过去就可以用了,但是到golang上需要注意很多地方。

那么什么时候该用呢?为什么有些地方需要用呢?

不使用指针的话,某些情况是没法赋值给结构体的

接下来看一段代码,这段代码不使用任何指针,先定义一堆用于测试的对象

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

type Person struct {  //person结构体,包含年龄,名称,车

    age  int

    name string

    car  Car

}

 

type Car struct {  //person名下的车

    name string  //车的名字

}

 

var personMap map[string]Person   //一个存放person的map

 

func setName(person Person, name string) { //给参数person设置名字

    person.name = name

}

 

func (person Person) setName(name string) {  //设置名字

    person.name = name

}

func printName(person Person){  //打印person的名字

    fmt.Println(person.name)

}

func (person Person)printName(){  //结构体person自己支持打印名字

    fmt.Println(person.name)

}

所以得出结论,当我们需要修改结构体的变量内容的时候,方法传入的结构体变量参数需要使用指针,也就是结构体的地址

需要修改map中的架构体的变量的时候也需要使用结构体地址作为map的value

如果仅仅是读取结构体变量,可以不使用指针,直接传递引用即可

*type 这里的type这个变量存放的东西是地址,这点需要明确,需要使用&type获取到地址。

以上就是golang 什么时候使用指针的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang ip地址字符串整数string int相互转换

go 号称几行代码开启一个 http server,底层都做了什么?

golang笔记之基本组成元素

求助!为何报错?

golang如何编译

golang mysql操作介绍

基于 mysql 分布式锁,防止多副本应用初始化数据重复

洗牌算法的golang实现,随便学习几个知识点

解决go get下载包失败问题

[译]go语言最佳实战[一]

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...