golang逗号ok模式整合demo

 更新时间:2023年11月01日 11:08:48   作者: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模式的资料请关注脚本之家其它相关文章!

相关文章

  • Go在GoLand中引用github.com中的第三方包具体步骤

    Go在GoLand中引用github.com中的第三方包具体步骤

    这篇文章主要给大家介绍了关于Go在GoLand中引用github.com中第三方包的具体步骤,文中通过图文介绍的非常详细,对大家学习或者使用Go具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • golang NewRequest/gorequest实现http请求的示例代码

    golang NewRequest/gorequest实现http请求的示例代码

    本文主要介绍了golang NewRequest/gorequest实现http请求的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Go语言编译原理之源码调试

    Go语言编译原理之源码调试

    这篇文章主要为大家介绍了Go语言编译原理之源码调试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Go语言使用模板渲染HTML页面的实现技巧

    Go语言使用模板渲染HTML页面的实现技巧

    在Web开发中,服务器端模板渲染仍然是很多场景(后台管理、邮件模板、服务端渲染页面等)的首选,Go标准库里的html/template不仅易用,而且默认防XSS,非常适合服务端渲染,本文通过实战示例讲解如何在Go中使用模板渲染HTML页面,需要的朋友可以参考下
    2025-08-08
  • Go 并发编程协程及调度机制详情

    Go 并发编程协程及调度机制详情

    这篇文章主要介绍了Go并发编程协程及调度机制详情,协程是Go语言最大的特色之一,goroutine的实现其实是通过协程,更多相关内容需要的朋友可以参考一下
    2022-09-09
  • Go语言面试题之select和channel的用法

    Go语言面试题之select和channel的用法

    金九银十面试季到了(PS:貌似今年一年都是面试季),就业环境很差,导致从业人员不得不卷。本文将重点讲解一下Go面试进阶知识点之select和channel,需要的可以参考一下
    2022-09-09
  • golang调用windows平台的dll库的方法实现

    golang调用windows平台的dll库的方法实现

    本文主要介绍了golang调用windows平台的dll库的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Go底层channel实现原理及示例详解

    Go底层channel实现原理及示例详解

    这篇文章主要介绍了Go底层channel实现原理及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Go疑难杂症讲解之为什么nil不等于nil

    Go疑难杂症讲解之为什么nil不等于nil

    在日常开发中,可能一不小心就会掉进 Go 语言的某些陷阱里,而本文要介绍的 nil ≠ nil 问题,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-10-10
  • Go语言同步等待组sync.WaitGroup结构体对象方法详解

    Go语言同步等待组sync.WaitGroup结构体对象方法详解

    这篇文章主要为大家介绍了Go语言同步等待组sync.WaitGroup结构体对象方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论