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