首页 > 其他 > 详细

go 的参数传递

时间:2019-03-23 17:21:37      阅读:140      评论:0      收藏:0      [点我收藏+]

 

再go语言中没有引用传递,所有都是按照值拷贝的方式传递的。

 

数组:实际就是堆栈上的一段连续内存,和c类似。(可以更加反编译代码推断 go tool compile -S main.go > main.S)

   但是再作为参数传递的时候,时当作一个对象,发生拷贝。通过汇报可以看到DUFFCOPY拷贝(https://www.jianshu.com/p/e6566f682b4e)

技术分享图片

slice:makeslice 的时候,返回的是一个slice对象。

func makeslice(et *_type, len, cap int) slice {...}

slice定义如下:

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

当作参数传递的时候,会拷贝对象,但是结构体中的array地址一样。

 

map:makemap的时候返回的时一个*hmap指针

func makemap(t *maptype, hint int, h *hmap) *hmap {...}

 

interface:

  关于interface的实现细节:https://research.swtch.com/interfaces

  从文章中我们可以知道interface实际是一个包含两部分的变量:第一部分指向接口类型;第二部分指向具体赋值给接口变量的值。如果值时指针,那么第二部分保存的时地址,如果值类型,那么赋值给interface的时候会发生拷贝而赋值给第二部分

 

go 的参数传递

原文:https://www.cnblogs.com/hygblog/p/10584550.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!