推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Golang中的参数传递示例详解

   2023-08-09 网络整理佚名1040
核心提示:本文主要给大家介绍了关于参数传递的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。关于参数传递,文档中有这么一句:函数调用参数均为值传递,不是指针传递或引用传递。经测试引申出来,当参数变量为指针或隐式指针类型,参数传递方式也是传值(指针本身的copy)Slice是最常用的数据结构之一,下面以Slice为例,解释的参数传递机制。可以与下面代码做对比,理解:

免费资源网-

前言

本文主要介绍参数传递的相关内容,分享给大家参考和学习。 下面就不多说了,来看看详细的介绍吧。

关于参数传递,文档中有这样一句话:

在它们之后,调用的 是按值传递给

和 .

函数调用参数按值传递,而不是通过指针或引用传递。 经过测试得出,当参数变量为指针或者隐式指针类型时,参数传递方式也是按值传递(指针本身的拷贝)

切片是最常用的数据结构之一。 我们以Slice为例来解释一下参数传递机制。

Slice的数据结构如下:

示例代码:

package main
import "fmt"
func main(){
 slice := make([]int, 3, 5)
 fmt.Println("before:", slice)
 changeSliceMember(slice)
 fmt.Println("after:", slice)
}
func changeSliceMember(slice []int) {
 if len(slice) > 1 {
 slice[0] = 9
 }
}

函数执行结果为:

befor:[0 0 0]
after:[9 0 0]

解释:

从数据结构图中可以看出,Slice可以理解为一种结构体类型,包括底层数组第一个元素的地址、数组len、。 slice对象在参数值传递的过程中传递的是三个字段的值。 ,其实函数中slice的内存地址和main中slice的内存地址是不一样的,但是字段值是一样的,第一个字段的值就是第一个元素的地址底层数组,因此可以直接更改元素内容

你可以对照下面的代码来理解:

package main
func main() {
 value := new(int)
 modifyFunc(value)
 println("main:", value)
}
func modifyFunc(value *int) {
 value = nil
 println("modifyFunc:", value)
}

结果:

modifyFunc: 0x0
main: 0xc820049f30

可以看到,即使将值作为指针传递,main中的变量value的值也没有改变,因为中间的value的值是一个指针,和main中的值是一样的,但是两个物体本身就是两个物体,读者可以仔细体会

总结

以上就是本文的全部内容。 希望本文的内容能够给您的学习或者工作带来一些帮助。 如果您有任何疑问,可以留言沟通。 感谢您的支持。

免费资源网-

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON