golang之命令行参数

golang之命令行参数

flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package main

import (
"fmt"
"flag"
)

var (
name string
help bool
)

type Person struct {
name string
}

func main() {

/**
-flag // 只支持bool类型
-flag=x
-flag x // 只支持非bool类型

以上语法对于一个或两个‘-’号,效果是一样的
*/
// 这种语法默认将返回的是一个指针 复制给&help
flag.BoolVar(&help, "h", false, "need help?")

// 返回一个相应类型的指针, 输出值要 *age
age := flag.Int("age", 25, "this is age")

flag.StringVar(&name, "name", "dottie", "this is name")

// 这里是关键,解析命令行参数
flag.Parse()

fmt.Println(name, *age, help)

// 输出默认的所有flag信息
flag.PrintDefaults()

/**
dottie 25 true
-age int
this is age (default 25)
-h need help?
-name string
this is name (default "dottie")
*/


a := 10
var b *int= &a

fmt.Println(*b) // 10

p := Person{"dottie"}
// {dottie} dottie dottie
fmt.Println(p, p.name, (&p).name)
var p1 *Person = &p
// p1是一个指针变量。里面存放的是地址,
// 但是结构体比较特殊,对结构体指针变量 获取其属性时,用结构体变量或者结构体指针变量都可以获取到结构体属性值
// &{dottie} {dottie} dottie dottie
fmt.Println(p1, *p1, p1.name, (*p1).name)
}