谁能解释下这段go代码

代码来自 The way to go 12.4

package main

import (
    "flag" // command line option parser
    "os"
)

var NewLine = flag.Bool("n", false, "print newline") // echo -n flag, of type *bool

const (
    Space   = " "
    Newline = "\n"
)

func main() {
    flag.PrintDefaults()
    flag.Parse() // Scans the arg list and sets up flags
    var s string = ""
    for i := 0; i < flag.NArg(); i++ {
        if i > 0 {
            s += " "
            if *NewLine { // -n is parsed, flag becomes true
                s += Newline
            }
        }
        s += flag.Arg(i)
    }

    os.Stdout.WriteString(s)
}

这里为什么可以重复声明变量 NewLine:

var NewLine = flag.Bool("n", false, "print newline") // echo -n flag, of type *bool

const (
    Space   = " "
    Newline = "\n"
)

随便换一个 Test 声明为同样的类型却不行:

var NewLine = flag.Bool("n", false, "print newline") // echo -n flag, of type *bool
var Test *bool

var temp = false

const (
    Space   = " "
    Newline = "\n"
    Test = &temp
)
阅读 2k
1 个回答

仔细看NewLine Newline 中第4个字符L,一个是大写,一个是小写.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题