代码来自 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
)
仔细看
NewLine
Newline
中第4个字符L,一个是大写,一个是小写.