switch-case 与select

Golang

switch-case 与select
如题来看一下switch-case 与select 是如何运作的,废话不多说,直接上个范例来瞧瞧吧!

switch-case

package main

import "fmt"

func getType(i interface{}) {
    switch t := i.(type) {
    case int:
        fmt.Printf("is interger %d \n", t)
    case string:
        fmt.Printf("is string %s \n", t)
    case float64:
        fmt.Printf("is float64 %v \n", t)
    default:
        fmt.Printf("type error")
    }
}

func main() {
    
    var i int = 100
    getType(i)
    var j float64 = 45.55
    getType(j)
    var k string = "foo"
    getType(k)
}

Select
Select 是监听,以下的部分我是觉得有点难懂,所以只能大概大概地写出来,可能需要真的使用到的时候才能理解其作用

package main

import "fmt"

func main() {
    ch := make(chan int, 1)

    ch <- 1
    select {
    case <-ch:
        fmt.Println("random 01")
    case <-ch:
        fmt.Println("random 02")
    }
}

这样执行的时候,其实是会随机乱跳的,如果把ch <- 1注解起来,则是会报错” deadlock!”,这时候如果把程序码修改为

package main

import "fmt"

func main() {
    ch := make(chan int, 1)

    
    select {
    case <-ch:
        fmt.Println("random 01")
    case <-ch:
        fmt.Println("random 02")
    default:
        fmt.Println("exit")   
    }
}

这样就没事情了,因为在有default的情况下会去执行他

Select基本上只能应用於channel上,以范例来看是可以做channel的资料接收及沟通使用。如果有满足多个条件则是随机选择,但在switch-case这点就比较不同,就跟其他语言雷同,是看顺序的。


<<:  Day09 测试写起乃-FactoryBot(1)

>>:  Day 0x8 UVa10193 All You Need Is Love

【D8】制作图表:三大法人-区分期货与选择权二类

前言 有了资料後,就要进行分析,因此需要做出图表比较适合观察,所以我们现在来做图罗! 本日程序码使用...

[Day4] Array Cardio Day 1

[Day4] Array Cardio Day 1 Javascript 的技巧 需要用到的技巧与练...

[Day 20] Crypto 小孔雀

今天要解2题喔, 我们先解完,再来分享为啥标题要叫小孔雀 先从简单的来 Mind your Ps a...

一些事件

在操作元件那天,已经大略谈到在Activity 上架上元件就像在写Windows Form 上的元件...

What are the solid methods to solve Outlook Send Receive Error?

While working on Microsoft outlook account, I am n...