博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go 的参数传递
阅读量:5077 次
发布时间:2019-06-12

本文共 718 字,大约阅读时间需要 2 分钟。

 

再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的时候会发生拷贝而赋值给第二部分

 

转载于:https://www.cnblogs.com/hygblog/p/10584550.html

你可能感兴趣的文章
Pandas 10分钟入门(官方文档注释版二)
查看>>
ajax.request函数使用详解
查看>>
后缀数组的应用
查看>>
CIS-framework之开发环境目录结构规范
查看>>
end=‘’
查看>>
自动出借-python+selenium
查看>>
04-TypeScript中的方法新功能(上)
查看>>
php 安装redis扩展
查看>>
关于 addEventListener 和 handleEvent 方法
查看>>
Html5 Canvas初探学习笔记(12) -图片裁减和调整
查看>>
Csharp:操作存儲過程輸出參數,和返回值
查看>>
csharp: LocalDataCache.sync
查看>>
真机上is waiting the debugger to attach问题请教
查看>>
NSNotificationCenter 传对象
查看>>
springboot2.0整合logback日志(详细)
查看>>
构造方法和构造函数
查看>>
线程安全的单例模式
查看>>
.net framework多个版本在IIS服务器上时应注意-重新注册IIS-错误Server Application Unavailable...
查看>>
放下这些,你会更优秀!
查看>>
《大空头》读书笔记
查看>>