Golang点滴记录

&符号的意思是对变量取地址,如:变量a的地址是&a 

*符号的意思是对指针取值,如:*&a,就是a变量所在地址的值,当然也就是a的值了

*和 & 可以互相抵消,同时注意,*&可以抵消掉,但&*是不可以抵消的 

首先先明白一点:无缓冲=堵塞,缓冲=非堵塞

比如

c1:=make(chan int)        无缓冲

c2:=make(chan int,1)      有缓冲

c1<-1                            

无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 <-c1 接手了 这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着

而 c2<-1 则不会阻塞,因为缓冲大小是1 只有当 放第二个值的时候 第一个还没被人拿走,这时候才会阻塞。

打个比喻

无缓冲的  就是一个送信人去你家门口送信 ,你不在家 他不走,你一定要接下信,他才会走。

无缓冲保证信能到你手上

有缓冲的 就是一个送信人去你家仍到你家的信箱 转身就走 ,除非你的信箱满了 他必须等信箱空下来。

有缓冲的 保证 信能进你家的邮箱

文章参考自:https://studygolang.com/articles/152

 

Go语言里面的Comma-ok断言语法可以直接判断是否是该类型的变量: value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,element是interface变量,T是断言的类型。如果element里面确实存储了T类型的数值,那么ok返回true,否则返回false。

 

go语言中数组与切片的区别

一句话总结:切片是动态数组,注意两者初始化和函数参数的区别

切片是长度可变、容量固定的相同的元素序列。Go语言的切片本质是一个数组。容量固定是因为数组的长度是固定的,切片的容量即隐藏数组的长度。长度可变指的是在数组长度的范围内可变。

1、初始化:数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变,切片不需要指定大小 

2、函数传递:数组需要明确指定大小,切片不需要。数组是值传递,切片是地址传递

注意slice和数组在声明时的区别:

声明数组时,方括号内写明了数组的长度或使用...自动计算长度 。

arr :=[...] int{1,2,3,4,5}、arr :=[5] int{1,2,3,4,5}

而声明slice时,方括号内没有任何字符。

slice := []int{1, 2, 3, 4, 5}、slice:=make([]int,len,cap)

文章参考自:http://blog.csdn.net/Nick_666/article/details/78640870

地址传递和值传递

值传递只是将变量的内容复制一份而已,函数进行操作的其实是另一个变量,只是另一个变量的值和传递的变量值是相同的。

而地址传递是直接把变量的地址传递给函数,这时函数是直接对原来的变量进行操作的。所以值会变化。

文章参考自:https://zhidao.baidu.com/question/348527211.html

 

golang的new和make主要区别如下:

1、make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据

2、new分配返回的是指针,即类型*T;make返回引用,即T;

3、new分配的空间被清零,make分配后,会进行初始化。

(本质来讲,导致这三个内建类型有所不同的原因是:引用在使用前必须被初始化,make初始化了内部的数据结构,填充适当的值。make返回初始化后的(非零)值。)

闭包(Closure)是匿名函数的一个特例。当一个匿名函数所访问的变量定义在函数体的外部时,就称这样的匿名函数为闭包。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值