go语言类指针方法 golang指针类型
golang-指针类型
tips: *号,可以指向指针类型内存地址上的值,号,可以获取值类型的内存地址
成都创新互联专注于芜湖县企业网站建设,成都响应式网站建设公司,购物商城网站建设。芜湖县网站建设公司,为芜湖县等地区提供建站服务。全流程按需定制开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
每一个变量都有内存地址,可以通过变量来操作内存地址中的值,即内存的大小
go语言中获取变量的内存地址方法:通过 符号可以获取变量的地址
定义:普通变量存储的是对应类型的值,这些类型就叫值类型
变量b,在内存中的地址为:0x1040a124,在这个内存地址上存储的值为:156
定义:指针类型的变量存储的是⼀个地址,所以⼜叫指针类型或引⽤类型
b 是值类型,它指向的是内存地址上的值
a是指针类型,它指向的是b的内存地址
指针类型定义,语法: var 变量名 *类型
指针类型在定义完成后,默认为空地址,即空指针(nil)
在定义好指针变量后,可以通过***** 符号可以获取指针变量指向的变量
在这里的 *a 等价于 b,通过修改 *a ,最终修改的是值类型b的值
这里a,d是值类型,b,c是指针类型
d就相当于把a内存地址上值,在内存中从新开辟了一块空间存储,d和a互不影响
b,c相当于指向了a的内存地址,当使用*号引用出内存地址上的变量上,修改值得,a的值也会跟着改变
go语言中指针的使用场景?
如果该函数会修改receiver,此时一定要用指针
如果receiver是 struct 并且包含互斥类型 sync.Mutex ,或者是类似的同步变量,receiver必须是指针,这样可以避免对象拷贝
如果receiver是较大的 struct 或者 array ,使用指针则更加高效。多大才算大?假设struct内所有成员都要作为函数变量传进去,如果觉得这时数据太多,就是struct太大
如果receiver是 struct , array 或者 slice ,并且其中某个element指向了某个可变量,则这个时候receiver选指针会使代码的意图更加明显
如果receiver使较小的 struct 或者 array ,并且其变量都是些不变量、常量,例如 time.Time ,value receiver更加适合,因为value receiver可以减少需要回收的垃圾量。
浅谈Go语言函数与方法的区别
前段时间,我们实验室用go作为后台开发语言开发了一个web项目,由于这是自己第一次使用go语言进行开发,在开发过程中,一味着追求完成任务,在编码的时候没有太注重性能,虽然勉强实现了功能,但是对go语言的理解还是比较浅显的。下面来谈谈自己对go语言中函数与方法的理解。
普通函数:
go函数可以返回多个值
值传递: 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样函数中如果对参数进行修改,将不会影响到实际参数
引用传递: 引用传递是指在调用函数将实际参数的地址传递到函数中,那么在函数中对参数进行的修改,将影响到实际参数。
一般来说go语言函数的 接收者(也就是形参)一般放在函数名后面 ,不能将指针类型的数据直接传递,也就是说函数形参如果是值类型,调用者必须使用值作为实参过来,如果函数形参是指针类型,则函数调用者需使用指针作为实参来调用。
普通方法:
接收者是在func关键字后面,而不是在函数名称后面,接收者可以是自己定义的一个类型,这个类型可以是struct、interface,一个方法就是一个包含了接收者的函数,接收者可以是命名类型或者是结构体类型的一个值或者是一个指针。
下面是一个例子来说明方法和函数的区别(重点)
当前文章:go语言类指针方法 golang指针类型
本文URL:http://cdiso.cn/article/doiohpg.html