golang逗号ok模式整合demo
作者:Peanut
这篇文章主要为大家介绍了golang逗号ok模式整合demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
golang的逗号ok模式的使用整理
/* @Time : 2019-02-23 11:49 @Author : Tenlu @File : ok @Software: GoLand */ package main import "fmt" // 逗号ok模式 func main() { useMap() useChan() userType() useType2() } //1.检测map中是否含有指定key func useMap() { company := map[string]string{"polly": "tencent", "robin": "baidu", "jack": "alibaba", "tenlu": "itech8"} if _, ok := company["toms"]; !ok { fmt.Println("key toms is not exists") } for ck, cv := range company { fmt.Println(ck + "->" + cv) } } // 2. 检测chan是否关闭 func useChan() { ch := make(chan int, 10) for i := 1; i <= 5; i++ { ch <- i } close(ch) // chan赋值结束,必须关闭通道 elem := <-ch fmt.Println(elem) // 1 // FIFO队列,先发送的chan一定最先被接收 for cc := range ch { fmt.Println(cc) } // ch <-8 // 此时再往ch这个chan里发送数据,就会报错,因为通道已经关闭,panic:send on closed channel elem2 := <-ch elem3 := <-ch fmt.Printf("elem2:%d\n", elem2) // 0,因为通道已经关闭 fmt.Printf("elem3:%d\n", elem3) // 0 if _, isClosed := <-ch; !isClosed { fmt.Println("channel closed") } // go是没有while循环的,此处类似其他语言的while(true) for { i, ok := <-ch if !ok { fmt.Println("channel closed!") break } fmt.Println(i) } } // 3.检测是否实现了接口类型 type I interface { // 有一个方法的接口 I Get() Int } type Int int // Int 类型实现了 I 接口 func (i Int) Get() Int { return i } func userType() { var myint Int = 5 var inter I = myint // 变量赋值给接口 val, ok := inter.(Int) fmt.Printf("%v, %v\n", val, ok) // 输出为:5,true } func useType2() { // chan 类型的空值是 nil,声明后需要配合 make 后才能使用。 var ch=make(chan interface{},10) ch<-10 ch<-"jack" ch<-map[string]interface{}{"name":"jack","age":11} close(ch) // 此处不close通道,遍历时则报错 fmt.Printf("%v\n",<- ch) for c:=range ch { fmt.Printf("for:%v\n",c) fmt.Sprintf("type:%T\n", c) if newValue,ok:=c.(map[string]interface{});ok{ fmt.Printf("type:%s\n",reflect.TypeOf(c)) // 获取变量类型 // map[string]interface {} if _,ok:=newValue["name"];ok{ for k,v:=range newValue { fmt.Printf("%v->%v,\n",k,v) } } } } fmt.Printf("%v\n",<- ch) // nil } func useType2() { // chan 类型的空值是 nil,声明后需要配合 make 后才能使用。 var ch=make(chan interface{},10) ch<-10 ch<-"jack" ch<-map[string]interface{}{"name":"jack","age":11} close(ch) // 此处不close通道,遍历时则报错 fmt.Printf("%v\n",<- ch) for c:=range ch { fmt.Printf("for:%v\n",c) fmt.Sprintf("type:%T\n", c) if newValue,ok:=c.(map[string]interface{});ok{ fmt.Printf("type:%s\n",reflect.TypeOf(c)) // 获取变量类型 // map[string]interface {} if _,ok:=newValue["name"];ok{ for k,v:=range newValue { fmt.Printf("%v->%v,\n",k,v) } } } } fmt.Printf("%v\n",<- ch) // nil }
代码里的注释很详细,有需要童鞋可以自行研究实践下
以上就是golang逗号ok模式整合demo的详细内容,更多关于golang逗号ok模式的资料请关注脚本之家其它相关文章!