为什么我不能使用flag.StringVar传递指向fmt.Println的指针?

时间:2018-08-17 13:04:47

标签: go

我已经开始研究Golang,并通过一个示例传递命令行参数,我得到了以下代码:

python

我的问题是,如果我取消引用其他指针的值(例如package main import ( "flag" "fmt" ) func main() { wordPtr := flag.String("namestring", "stringvalue", "Pass in a string") numPtr := flag.Int("number", 11, "Pass in an int") boolPtr := flag.Bool("switchflag", false, "Pass in a bool") var svar string flag.StringVar(&svar, "svar", "svarstringvalue", "A string variable") flag.Parse() fmt.Println("Word:", *wordPtr) fmt.Println("Word2:", wordPtr) fmt.Println("numb:", *numPtr) fmt.Println("numb2", numPtr) fmt.Println("switchflag", *boolPtr) fmt.Println("switchflag2", boolPtr) fmt.Println("svar:", svar) fmt.Println("svar2", &svar) fmt.Println("svar3", *svar) //<-- This won't work... fmt.Println("tail:", flag.Args()) } 等),为什么要获得其他指针的值,而如果我传入*wordPtr,则可以获得内存地址,但是wordPtr,我必须传递svar才能获取值,而svar则获取内存地址?

看这里https://golang.org/pkg/flag/的文档,它说您传入一个变量来存储标志(大概是已经创建的变量?),但是我仍然不明白为什么我必须做点什么与其他变量比较时,获取值的方法有所不同。

这是我通过传递一些命令来运行它的结果:

&svar

感谢您的帮助。另外,如果我对它有任何误解,请告诉我。

干杯。

1 个答案:

答案 0 :(得分:0)

这很简单,您尝试取消引用值而不是指针。

var svar string不是指针,而是一个值。

在这种情况下

fmt.Println("svar3", svar)是正确的用法

不用担心将StringVar用作 ...Var(&svar, "sv...表示您正在传递的地址svar不是值。