嗨,我想记录一个变量的值,如果它不是nil,否则我想打印其他任何东西例如:
var point *string var point2 *string p:="hi" point2=&p fmt.Printf("%v,%v",*point,*point2)
在这种情况下,我会有一个错误,因为点是nill,所以有没有办法打印变量的值,如果它不是nil或打印任何其他东西,如果它是nil?我想用一种简单的方法来做这件事,而不是创建一个if/else语句来检查变量是否为nil
q9yhzks01#
对于一种更通用的方法来注销指针的值,甚至是结构体中的指针,您可以封送到JSON并记录结果。下面是一个打印单个指针和非指针值的示例,以及使用此方法的结构。
type Line struct { Point1 *string Point2 *string Name string } func main() { point1 := "one" line := Line{&point1, nil, "fancy"} printJSON(line.Point1, line.Point2, line.Name) printJSON(line) } func printJSON(i ...interface{}) { if b, err := json.Marshal(i); err == nil { log.Println(string(b)) } }
Go Playground
zlwx9yxi2#
由于Go语言中没有?:运算符,所以最好的方法是写一个函数:
?:
func StringPtrToString(p *string) string { if p != nil { return *p } return "(nil)" }
c9x0cxw03#
在这种情况下,你可能应该使用if/else,但是如果你对point和point2有很多潜在的“if”条件,你可以使用Switch语句。
point
point2
package main import ( "fmt" ) func main() { type Points struct { Point *string Point2 *string } p := "hi" pts := Points{nil, &p} switch pts.Point { case nil: fmt.Printf("%v is empty", pts.Point) default: fmt.Printf("%v", *pts.Point) } fmt.Println() switch pts.Point2 { case nil: fmt.Printf("%v is empty", pts.Point2) default: fmt.Printf("%v", *pts.Point2) } }
输出量:
<nil> is empty hi
Go playground
gorkyyrv4#
我可以推荐使用https://github.com/samber/lo在其他有用的函数中,有FromPtrOr:
FromPtrOr
str := "hello world" value := lo.FromPtrOr(&str, "empty") // "hello world" value := lo.FromPtrOr[string](nil, "empty") // "empty"
4条答案
按热度按时间q9yhzks01#
对于一种更通用的方法来注销指针的值,甚至是结构体中的指针,您可以封送到JSON并记录结果。
下面是一个打印单个指针和非指针值的示例,以及使用此方法的结构。
Go Playground
zlwx9yxi2#
由于Go语言中没有
?:
运算符,所以最好的方法是写一个函数:c9x0cxw03#
在这种情况下,你可能应该使用if/else,但是如果你对
point
和point2
有很多潜在的“if”条件,你可以使用Switch语句。输出量:
Go playground
gorkyyrv4#
我可以推荐使用https://github.com/samber/lo
在其他有用的函数中,有
FromPtrOr
: