Go 是否有一种惯用的方式来打印字符串指针内容或nil?

Go 是否有一种惯用的方式来打印字符串指针内容或nil?,go,Go,我有一个字符串指针,它可能是零,也可能不是零,如果内容存在,我想打印出字符串的内容,或者如果指针是零,则指示它是零。有没有一种聪明的方法可以做到这一点,它既不涉及if检查,也不涉及临时变量(最好是单行) 现在我用的是这样的东西: if p == nil { fmt.Print(p) } else { fmt.Print(*p) } 但是,当在该值之前和/或之后有其他格式和其他变量要打印时,这尤其令人尴尬和冗长。您可以这样做: func main() { var hell

我有一个字符串指针,它可能是零,也可能不是零,如果内容存在,我想打印出字符串的内容,或者如果指针是零,则指示它是零。有没有一种聪明的方法可以做到这一点,它既不涉及if检查,也不涉及临时变量(最好是单行)

现在我用的是这样的东西:

if p == nil {
    fmt.Print(p)
} else {
    fmt.Print(*p)
}

但是,当在该值之前和/或之后有其他格式和其他变量要打印时,这尤其令人尴尬和冗长。

您可以这样做:

func main() {
    var hello SmartString = "hello"

    p := &hello
    p.Print()
    p = nil
    p.Print()

}

type SmartString string

func (p *SmartString) Print() {
    if p == nil {
        fmt.Println(p)
    } else {
        fmt.Println(*p)
    }
}
这是不是一个好主意取决于你

您甚至可以使用字符串接口使其与
fmt.Println

func main() {
    var hello SmartString = "hello"

    p := &hello
    fmt.Println(p)
    p = nil
    fmt.Println(p)

}

type SmartString string

func (p *SmartString) String() string {
    if p == nil {
        return "<nil>"
    }
    return string(*p)
}
func main(){
var hello SmartString=“hello”
你好
fmt.Println(p)
p=零
fmt.Println(p)
}
输入SmartString字符串
func(p*SmartString)String()字符串{
如果p==nil{
返回“”
}
返回字符串(*p)
}

如果您有一个已经不是很惯用的字符串指针。。。但是不,没有比你做的更好的方法了。好吧,你可以为此写一个函数…@Not_a_Golfer为什么我有字符串指针的一个例子是用可选的字符串字段解压json数据。另一个是AWSSDKGO库,它广泛使用指针(可能也是因为引擎盖下的json;我还没有看过)。无论哪种方式,“停止使用指针”都不是一个可用的选择。这不完全是我想要的,但它似乎是最好的选择。谢谢。如果您将
Print
方法重命名为
String
,并使其返回字符串而不是写入标准输出,您将实现
Stringer
接口,这可能更有用。