我有一个字符串指针,可能是也可能不是nil,如果内容存在,我想打印出字符串的内容,或者如果指针是nil则指示指针为nil。是否有一种聪明的方法可以做到不涉及if检查或临时变量(最好是单行)?
现在我正在使用这样的东西:
if p == nil {
fmt.Print(p)
} else {
fmt.Print(*p)
}
但是当在该值之前和/或之后有其他格式和其他变量打印时,这尤其笨拙和冗长。
答案 0 :(得分:1)
你可以这样做:
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)
}
}
是否是个好主意取决于你。
您甚至可以使用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)
}