Pointers Golang指向值的指针字符串

Pointers Golang指向值的指针字符串,pointers,go,flags,Pointers,Go,Flags,我正在使用一些代码标志来管理程序或服务。今天我遇到了一个问题,我想使用这种声明: var port = flag.String("port", "", "port") 它返回一个*string类型变量,我无法将其转换为string。 我是如何处理这个问题的: r.Run(":" + *port) 这是可行的,但最好的做法是什么?我的意思是,有很多函数正在等待字符串作为参数,在这种情况下,我无法处理这个问题 您的端口变量的类型为*string(这是返回的内容)。要获取类型为string的值,除

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

var port = flag.String("port", "", "port")
它返回一个
*string
类型变量,我无法将其转换为
string
。 我是如何处理这个问题的:

r.Run(":" + *port)

这是可行的,但最好的做法是什么?我的意思是,有很多函数正在等待字符串作为参数,在这种情况下,我无法处理这个问题

您的
端口
变量的类型为
*string
(这是返回的内容)。要获取类型为
string
的值,除了取消引用之外没有其他方法:
*端口

您可以在需要将其作为
字符串传递的每个位置执行此操作,也可以使用:

在这种情况下,
端口
变量的类型为
字符串
,因此不需要解引用。在这里,您显式地为要使用的
标志
包提供
*字符串
值:类型为
字符串
的变量的地址,当然类型为
*字符串
(因此
标志
包将能够修改/设置所指的值)。
flag.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()
解决方案

请注意,无论端口是一个数字,您最好使用或:


您的
端口
变量的类型为
*string
(这是返回的内容)。要获取类型为
string
的值,除了取消引用之外没有其他方法:
*端口

您可以在需要将其作为
字符串传递的每个位置执行此操作,也可以使用:

在这种情况下,
端口
变量的类型为
字符串
,因此不需要解引用。在这里,您显式地为要使用的
标志
包提供
*字符串
值:类型为
字符串
的变量的地址,当然类型为
*字符串
(因此
标志
包将能够修改/设置所指的值)。
flag.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()
解决方案

请注意,无论端口是一个数字,您最好使用或:


您应该能够按原样使用它,或者将其转换为字符串

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)

}

您应该能够按原样使用它,或者将其转换为字符串

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)

}

标志
包函数返回的任何内容都是指针,因为它需要在“幕后”进行修改。不过,您最好使用
flag.Int
,因为您当前正等待有人使用“-flag crashy”调用您的程序,这很可能会引起恐慌。那么,请使用
flag.StringVar
。有时阅读包文档确实有帮助。包函数返回的任何内容都是指针,因为它需要在“幕后”进行修改。不过,您最好使用
flag.Int
,因为您当前正等待有人使用“-flag crashy”调用您的程序,这很可能会引起恐慌。那么,请使用
flag.StringVar
。有时阅读软件包文档确实有帮助。