V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Weixiao0725
V2EX  ›  Go 编程语言

进来看几个 Go 的 syntax 代码段吧

  •  
  •   Weixiao0725 · 2019-05-23 19:07:06 +08:00 · 2421 次点击
    这是一个创建于 2018 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 感觉是 go 的一个 bug 啊,网上解释说是因为 switch 之后的打括号放在下一行,所以 go 编译器默认在 switch f()之后加了一个分号。下面的 case 用的是系统默认的 switch 值 true 所以输出 true。但是如果不写 switch 那一行,编译器就直接报错了,说明 switch 和下面的 case 是分不开的啊。
    2. 对于类型 *[]int 和 *[3]int,可以对后者 range 操作,但是前者报编译器错误
    3. 对于第三个就不理解了,请哪位大佬出来解释下。

    测试代码: https://play.golang.org/p/7D3nEYF3UFX

    	// #1
    	f := func() bool { return false }
    	switch f()
    	{
    		case true:
    			println("true")
    		case false:
    			println("false")
    	}
    
    	// #2
    	arr := [3]int{1,2,3}
    	arrPtrOfLen := &arr
    	for i := range arrPtrOfLen { println(i) }
    
    	arr2 := []int{1,2,3}
    	arrPtrOfVar := &arr2
    	for j := range arrPtrOfVar { println(j) } 
    	//// arrPtrOfVar compile error: cannot range over data (type *[]int)
    
    	// #3
    	for k := range (*[3]int) (nil) {
    		println(k)
    	}
    
    zzn
        1
    zzn  
       2019-05-23 23:28:21 +08:00
    这些标准里都写的清清楚楚吧
    1.
    > A missing switch expression is equivalent to the boolean value true.
    https://golang.org/ref/spec#Switch_statements

    2.
    > The expression on the right in the "range" clause is called the range expression, which may be an array, pointer to an array, slice, string, map, or channel permitting receive operations.
    https://golang.org/ref/spec#RangeClause

    3. 就在 RangeClause 的例子里
    Weixiao0725
        3
    Weixiao0725  
    OP
       2019-05-24 08:36:08 +08:00
    @zzn @liulaomo 感谢两位解答,谢谢~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2602 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:34 · PVG 18:34 · LAX 02:34 · JFK 05:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.