我有一个可能为零也可能不为零的字符串指针,如果内容存在,我想打印出字符串的内容,或者如果指针为零,则指示指针为零。有没有一种聪明的方法来做到这一点,不涉及 if 检查或临时变量(最好是单行)?
现在我正在使用这样的东西:
if p == nil {
fmt.Print(p)
} else {
fmt.Print(*p)
}
Run Code Online (Sandbox Code Playgroud)
但是,当存在其他格式和其他要在该值之前和/或之后打印的变量时,这尤其尴尬和冗长。
你可以这样做:
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)