gpt4 book ai didi

pointers - Golang 指向值的指针字符串

转载 作者:IT王子 更新时间:2023-10-29 02:25:34 26 4
gpt4 key购买 nike

一些代码我使用标志来管理程序或服务。今天我遇到了问题,我想在哪里使用这种声明:

var port = flag.String("port", "", "port")

它返回一个 *string 类型的变量,我无法将其转换为 string。我是如何解决这个问题的:

r.Run(":" + *port)

它正在运行,但最佳实践是什么?我的意思是有很多函数正在等待字符串作为参数,在这种情况下我无法处理。

最佳答案

您的port 变量是*string 类型(这是flag.String() 返回的)。要获取 string 类型的值,除了取消引用它别无他法:*port

您可以在任何需要将其作为字符串 传递的地方这样做,或者您可以使用flag.StringVar()。相反:

var port string

func init() {
flag.StringVar(&port, "port", "", "port")
}

在这种情况下,您的port 变量是string 类型,因此不需要取消引用。在这里,您显式地为要使用的 flag 包提供了一个 *string 值:您的 string 类型变量的地址,它将是当然是输入 *string(这样 flag 包就可以修改/设置指向的值)。 flag.String() 是一个方便的函数,它分配一个 string 值并返回指向它的指针。

另一种选择是取消引用它一次并将string 值存储在另一个类型为string 的变量中,例如:

var portp = flag.String("port", "", "port")
var port string

func main() {
flag.Parse()
port = *portp
// Now you can use port which is of type string
}

但我更喜欢flag.StringVar() 解决方案。

请注意,无论端口是一个数字,您最好还是使用 flag.Int()flag.IntVar() :

var port int

func init() {
flag.IntVar(&port, "port", 0, "port")
}

关于pointers - Golang 指向值的指针字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40152220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com