go语言中var声明chan、map、指针,注意的情况
在处理超时时候出现的问题:
问题代码为
package main
import(
"fmt"
"time"
)
func main(){
var ch chan string
go func() {
ch <- "result"
}()
select {
case res := <-ch:
fmt.Println(res)
return
case <-time.After(time.Second * 5):
fmt.Println("timeout")
}
}
错误的原因:var ch chan string没有对ch分配空间,使得一直运行的是case <- time.After(time.Second*5)这个分支。解决方法为添加:ch = make(chan string)或者删除var ch chan string,再添加ch := make(chan string)
思考:
var在声明指针、chan、map的时候都要使用make分配一下空间,否则无法使用
实现map的比较:
var kl map[string]string kl["string"]="stk" fmt.Println(kl) //出现错误 var kt map[string]string kt = make(map[string]string) kt["string"] = "strin" fmt.Println(kt) //正确

浙公网安备 33010602011771号