博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 坑集
阅读量:6437 次
发布时间:2019-06-23

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

hot3.png

func main() {	x := 1	defer func(a int) { fmt.Println("a=", a) }(x)	defer func() { fmt.Println("x=", x) }()	x++}

结果: x=2 a=1

说明: defer 调用所需参数在 defer 语句执行时就被已计算好了 (拷贝传递),闭包内则是引用,defer执行顺序FIFO

数组和slice

数组是值类型 slice是引用类型,

数组的创建  arr:=[...]int{1,2,3}   arr:=[3]int{}  arr:=new([10]int) (注意new返回的是[10]int的指针类)

slice的创建  slice:=[]int{1,2,3} slice:=arr[n:m]( n <= x  < m) slice:=make([]int,len,[cap]) (cap default=len)

每个slice指向了一个底层数组,对slice的更新会反映到这个底层数组上,cap=slice在数组的start_index到数组的end_index

reslice  slice1:=slice2[n:m] 在slice进行reslice时如果n,m超过了cap 不会引发底层数组的重分配 ,而会panic: runtime error: index out of range

append(s1,1,2,3) 可以引发底层数组重分配 增加一个cap

copy(dst,src)  len=min(len(dst),len(src))

map

d := map[*int]struct{ x, y float64 } { &10: { 1.0, 2.0 } }

struct 和数组一样 也是 值类型

type s1 struct {	s2 struct {		a int	}}func main() {	m := map[int]struct{ a int }{1: {1}}//正确	fmt.Println(m)		s := s1{
{1}}//异常 missing type in composite literal fmt.Println(s)}
 匿名struct可以作为map的value而且赋值方便,而匿名struct作为struct的成员则在初始化时 需要带上struct的名字才行,成员变量 匿名struct 就不方便了。

struct拷贝复制

u := User{ 100, "Tom" }var u2 *User = new(User)*u2 = u

匿名成员 (组合优于继承)

type D1 struct {	x int}type Data struct {	D1	x int}func main() {	d := Data{D1{10}, 20}	d.x = 200	d.D1.x = 100	fmt.Println(d)}

接口类型推断

if o,ok:=i.(User);ok{     o.xxx}switch o:=i.(type){    case User:          xxx    case Man:          xxx}

将对象赋值给接口变量时,会发发生值拷贝行为

u := User{ 1, "Tom" }i := Tester(u)//强制转换 赋值发生的是copy动作//在golang里要千万注意 = 这个赋值动作 都是copy动作,如果copy的对象是个指针的话性能会比较好u.Id = 100 // 显式修改的原对象u.Name = "Jack"fmt.Println(u, i) // 虽然接⼝口内的复制品未受到影响

转载于:https://my.oschina.net/u/157514/blog/313031

你可能感兴趣的文章
LDAP常用命令解析
查看>>
Cobbler体验小记
查看>>
storm详解
查看>>
[MySQL 优化] 移除多余的checksum
查看>>
JS中的“!!”
查看>>
浅说《测试用例》----给测试新手的
查看>>
GridView实战二:使用ObjectDataSource数据源控件(自定义缓存机制实现Sort)
查看>>
网站安装打包 软件环境检测与安装[二] 下
查看>>
WWDC 2013 Session笔记 - iOS7中的多任务
查看>>
android被逼学习布局管理器
查看>>
深蓝词库转换1.2版本发布——支持紫光拼音和拼音加加
查看>>
深入理解Java内存模型(三)——顺序一致性
查看>>
【机房重构】一步一步往上爬——不仅仅是三层
查看>>
固定UILabel宽度分行显示
查看>>
(三十)java多线程一
查看>>
【原】a.class与a .class的区别
查看>>
android 减少图片出现oom错误
查看>>
Linux_CentOS-服务器搭建 <六>
查看>>
[bmgr]android应用数据备份以及还原
查看>>
【转载】JAVA内存模型和线程安全
查看>>