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

New*_*nce 8 go

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

现在我正在使用这样的东西:

if p == nil {
    fmt.Print(p)
} else {
    fmt.Print(*p)
}
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*nin 7

你可以这样做:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是否是一个好主意取决于你。

您甚至可以使用 String 接口来使其与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)
}
Run Code Online (Sandbox Code Playgroud)

  • 如果将“Print”方法重命名为“String”并使其返回字符串而不是写入标准输出,则您将实现“Stringer”接口,这可能更有用。 (3认同)