zoukankan      html  css  js  c++  java
  • 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底层实现还没看,可能说的会有偏颇地方,以上只是做了个简单实验验证。

  • 相关阅读:
    Json对象和字符串互转
    JSNOP调用。。。
    org.hibernate.LazyInitializationException: could not initialize proxy no Session
    myeclipse生成注解实体
    jquery判断浏览器和版本
    JSTL XML标签库
    ORACLE 月份不全,补全月份的sql
    js 上下左右键控制焦点
    google gson使用
    js判断undefined类型
  • 原文地址:https://www.cnblogs.com/xiarl/p/15508663.html
Copyright © 2011-2022 走看看