我已经开始研究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
感谢您的帮助。另外,如果我对它有任何误解,请告诉我。
干杯。
答案 0 :(得分:0)
这很简单,您尝试取消引用值而不是指针。
var svar string
不是指针,而是一个值。
fmt.Println("svar3", svar)
是正确的用法
不用担心将StringVar用作
...Var(&svar, "sv...
表示您正在传递的地址svar
不是值。