嗨我想记录一个变量的值,如果它不是nil,否则我想打印其他任何东西
例如:
var point *string
var point2 *string
p:="hi"
point2=&p
fmt.Printf("%v,%v",*point,*point2)
在这种情况下我会有一个错误,因为point是nill,所以有没有办法打印变量的值,如果它不是nil或打印其他任何东西,如果它是nil?
我想以一种简单的方式执行此操作,而不是创建if / else语句来检查变量是否为nil
答案 0 :(得分:1)
在这种情况下你可能应该使用if / else但是如果point
和point2
中的每一个都有很多潜在的“if”条件,你可以使用Switch语句。
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
答案 1 :(得分:0)
由于Go中没有?:
运算符,最好的方法是编写函数:
func StringPtrToString(p *string) string {
if p != nil { return *p }
return "(nil)"
}
答案 2 :(得分:0)
对于注销指针甚至结构中的指针的值的更通用方法,您可以编组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))
}
}