• go语言switch的一个小语法点,case执行顺序


    学习一个视频教程时说go里的switch中case是从上往下执行,直到一个case结果是true,开始执行其中的语句块。

    之前学习的时候没注意到这个。以为是和c++一样是直接hash命中要执行的case。

    试了下,结果是和视频中说的一致的。实验代码如下:

    func func2() bool {
    	fmt.Println("run in func2")
    	return false
    }
    
    func func3() bool {
    	fmt.Println("run in func3")
    	return true
    }
    
    func func4() bool {
    	fmt.Println("run in func4")
    	return true
    }
    
    func testSwitch() {
    	switch {
    	case func1():
    		fmt.Println("into 1")
    	case func2():
    		fmt.Println("into 2")
    	case func3():
    		fmt.Println("into 3")
    	case func4():
    		fmt.Println("into 4")
    	}
    	fmt.Println("testSwitch run end")
    } 

    运行结果:

    run in func1
    run in func2
    run in func3
    into 3

    其实也是,回想c++,它的switch是有很多限制,case里的需要是整型或枚举,所以它能做到hash。而go对于这个switch写法,,它这没这效率的考虑,设计的方便宽广的多,而想hash也是hash不了的吧。

    不过,可能就要考虑一些case里表达式会被执行的一些副作用影响,写代码时候需要注意些。

    而且从上往下都执行,可能,和if相比差别也就是语法灵活性上、或者表达清晰上,选择时,也没有效率考虑啥事了。

    后面也试了下正常些的go的 switch写法 switch 处有个变量,做匹配判断的:

    func testSwitch() {
    	var iv int = 3
    	switch iv {
    	case func1int():
    		fmt.Println("into 1")
    	case func2int():
    		fmt.Println("into 2")
    	case func3int():
    		fmt.Println("into 3")
    	case func3int():
    		fmt.Println("into 4")
    	}
    	fmt.Println("testSwitch run end")
    }
    

      

    其中几个case的函数返回的分别是整型 1,2,3,4。执行结果还是这样:

    run in func1
    run in func2
    run in func3
    into 3

    go的siwtch底层实现还没看,可能说的会有偏颇地方,以上只是做了个简单实验验证。

  • 相关阅读:
    进程、线程和协程的区别(转)
    IO多路复用机制(转)
    防火墙及其功能(转)
    TCP连接的建立和终止。
    TCP和UDP细致刻画,区别。
    typename T和class T区别与联系
    TCP UDP的详解开始 ----UNIX网络编程
    关于UNIX网络编程的的OSI,1.7章的总结
    UNIX网络编程daytime服务端和客户端的实现过程
    linux shell脚本执行错误:bad substitution
  • 原文地址:https://www.cnblogs.com/xiarl/p/15508663.html
Copyright © 2020-2023  润新知