我想知道这个token是否是 *string类型,然后我们通过引用得到值。但是如果它已经被解引用了,为什么我还需要再次解引用它呢?
func mustToken() string {
token := flag.String("t", "", "token for access to tg bot")
flag.Parse()
if *token == "" {
log.Fatal("token isnt specified")
}
return *token
}
字符串
我试着谷歌,但不明白TBH。
2条答案
按热度按时间kgsdhlau1#
在Go语言中,当你定义一个
string
变量时,它默认为""
。当你从输入中解析数据时,如果你不使用指针,如果用户没有提供值,或者显式提供""
,你会得到一个空字符串。如果用户指定
--token ""
,或者根本不指定标志,则两者都将导致token = ""
。当使用指针时,如果用户没有提供标志,
token
的值将是nil
。所以你知道用户是否提供了标志。e5nqia272#
下面是上面的程序中发生的事情:
1.对flag.String的调用分配一个
string
变量并注册该变量、名称和默认值,并返回一个指向已分配变量的指针。1.对flag.parse的调用解析命令行并将值写入注册的字符串变量。
1.表达式
*token
解引用从flag.String返回的指针以获取注册的字符串变量的值。程序使用表达式*token
两次,因为程序访问该值两次。