go
我家阿嘚
好好学习,努力加油
展开
-
go defer和return的执行顺序
func deferReturn (){ i:=1 j:=func(n *int)int{ defer func() { *n=*n+1 }() return *n }(&i) println("i",i) println("j",j)}执行结果=== RUN Test_deferReturni 2j 1执行顺序1、defer压栈2、返回值到内存区3、赋值给j4、执行defer所以j还是1i变成了2...原创 2021-12-09 20:27:19 · 102 阅读 · 0 评论 -
无缓存channel不被消费导致阻塞
创建一个没有缓存的channel,如果不去消费他,会在写入的时候导致无法写入,一致被阻塞// NoCacheChan 测试没有缓存的channel在不被消费的情况下能不能正常推出func NoCacheChan() { c:=make(chan int) go func() { start:=time.Now().Unix() c<-1 println("channel done") println(time.Now().Unix()-start) close(c原创 2021-12-09 10:39:51 · 312 阅读 · 0 评论 -
go nil是否可以传给channel
测试代码,将一个空值赋值给channelfunc ChanNil(){ a:=make (chan map[int]int,1) a<-nil close(a) b:=<-a if b==nil{ println("nil") }else { _,ok:=b[1] println("ok",ok) }}将一个map赋值给channelfunc ChanNil(){ a:=make (chan map[int]int,1) a<-map[int原创 2021-12-07 14:42:12 · 700 阅读 · 0 评论 -
go 两个channel同时range
定义两个channel,同时用for进行遍历,前一个会阻塞后一个吗是的func Chan() { c1 := make(chan int) c2 := make(chan int) go func() { for i := 0; i < 5; i++ { time.Sleep(2 * time.Second) c1 <- i } close(c1) }() go func() { for i := 0; i < 5; i++ { tim原创 2021-11-29 14:52:24 · 451 阅读 · 0 评论 -
go 函数 切片参数append是引用吗
import "fmt"func test() { var arr=[]string{"12","23","34"} fmt.Printf("arr %+v,arr cap %d\n",arr,cap(arr)) arrNew:=slice(arr) fmt.Printf("new %+v,arrNew cap %d\n",arrNew,cap(arrNew)) arrNew[0]="90" fmt.Printf("arr %+v,arr cap %d\n",arr,cap(arr)) .原创 2021-06-11 12:27:00 · 175 阅读 · 0 评论 -
golang select
使用case支持的条件是channel的状态,必须是写入或者读channel如果是非阻塞读写channel可以使用default, select { case i := <-a: println(i) default: println("default") }如果是阻塞的不需要default select { case i := <-a: println(i) }如果有多个执行条件,且channel同时发...原创 2021-01-27 16:12:00 · 55 阅读 · 0 评论 -
iota golang
iota 在定义常量的时候可以实现自增例如:const( a = iota b c d)println(a,b,c,d)执行结果:0 1 2 3也可以用来做一些运算例如: const( a = 2+3*iota b c d ) println(a,b,c,d)结果2 5 8 11通过“-"可以实现跳过一些值 const( a = iota b _ _ c _ d ) prin.原创 2021-01-26 14:04:09 · 63 阅读 · 0 评论 -
用impl实现type XXX interface {}
impl介绍implgenerates method stubs for implementing an interface.//impl用于实现生成接口的方法。安装准备工作:先检查可能遇到的问题是不是都解决了安装命令go get -u github.com/josharian/impl可能遇到的问题1、packagegolang.org/x/tools/imports: unrecognized import path "golang.org/x/tools/impo..原创 2020-05-14 16:55:03 · 548 阅读 · 0 评论