Golang 指向值的指针字符串
Golang pointer string to value
一些代码我使用标志来管理程序或服务。今天我遇到了问题,我想在哪里使用这种声明:
var port = flag.String("port", "", "port")
它是 return 返回一个 *string
类型的变量,我无法将其转换为 string
。
我是如何解决这个问题的:
r.Run(":" + *port)
它正在运行,但最佳做法是什么?我的意思是有很多函数正在等待字符串作为参数,在这种情况下我无法处理。
您的 port
变量是 *string
类型(这就是 flag.String()
returns)。要获取 string
类型的值,除了取消引用它别无他法:*port
.
您可以在每个需要将其作为 string
传递的地方这样做,或者您可以使用 flag.StringVar()
代替:
var port string
func init() {
flag.StringVar(&port, "port", "", "port")
}
在这种情况下,您的 port
变量是 string
类型,因此不需要取消引用。在这里,您明确地向要使用的 flag
包提供了一个 *string
值:您的 string
类型变量的地址,它当然是 *string
类型(所以flag
包将能够修改/设置指向的值)。 flag.String()
是一个方便的函数,它分配一个 string
值和 returns 你指向它的指针。
另一种选择是取消引用它一次并将 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()
or flag.IntVar()
:
var port int
func init() {
flag.IntVar(&port, "port", 0, "port")
}
您应该能够按原样使用它或将其转换为字符串。
package main
import "fmt"
import "flag"
func main () {
var port = flag.String("port", "", "port")
flag.Parse()
test(*port)
newstring := *port
test(newstring)
}
func test (s string) {
fmt.Println(s)
}
一些代码我使用标志来管理程序或服务。今天我遇到了问题,我想在哪里使用这种声明:
var port = flag.String("port", "", "port")
它是 return 返回一个 *string
类型的变量,我无法将其转换为 string
。
我是如何解决这个问题的:
r.Run(":" + *port)
它正在运行,但最佳做法是什么?我的意思是有很多函数正在等待字符串作为参数,在这种情况下我无法处理。
您的 port
变量是 *string
类型(这就是 flag.String()
returns)。要获取 string
类型的值,除了取消引用它别无他法:*port
.
您可以在每个需要将其作为 string
传递的地方这样做,或者您可以使用 flag.StringVar()
代替:
var port string
func init() {
flag.StringVar(&port, "port", "", "port")
}
在这种情况下,您的 port
变量是 string
类型,因此不需要取消引用。在这里,您明确地向要使用的 flag
包提供了一个 *string
值:您的 string
类型变量的地址,它当然是 *string
类型(所以flag
包将能够修改/设置指向的值)。 flag.String()
是一个方便的函数,它分配一个 string
值和 returns 你指向它的指针。
另一种选择是取消引用它一次并将 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()
or flag.IntVar()
:
var port int
func init() {
flag.IntVar(&port, "port", 0, "port")
}
您应该能够按原样使用它或将其转换为字符串。
package main
import "fmt"
import "flag"
func main () {
var port = flag.String("port", "", "port")
flag.Parse()
test(*port)
newstring := *port
test(newstring)
}
func test (s string) {
fmt.Println(s)
}