繁体   English   中英

在结构中打印nil错误时出现恐慌

[英]Panic when printing a nil error in a struct

当在结构中打印错误类型字段的nil值时,以下代码会惊慌。 为什么?

package main

import (
    "fmt"
)

type ta struct {
    int
}

type tb struct {
    int
    *ta
}

type tc struct {
    int
    error
}

type td struct {
    int
    error interface{}
}

func main() {
    fmt.Println(fmt.Sprintf("%v", ta{1}))
    fmt.Println(fmt.Sprintf("%v", tb{1, nil}))
    fmt.Println(fmt.Sprintf("%v", tc{1, nil}))
    fmt.Println(fmt.Sprintf("%v", td{1, nil}))
}
▸ go run main.go
{1}
{1 <nil>}
%!v(PANIC=runtime error: invalid memory address or nil pointer dereference)
{1 <nil>}

https://play.golang.org/p/SrzUsJ3pyRC

跟进问题:如果我有tc{1, nil}这样的值,如何打印而不会引起恐慌?

tc ,您要嵌入类型为error的值。 Sprintf看到tc实现了error (由于嵌入),并尝试在其上调用Error() ,这会触发错误,因为该值为nil

如果要打印而不会引起紧急情况,请不要嵌入error (将其放在命名字段中),或确保嵌入的error值不是nil

我不知道为什么,但这似乎可以解决...

type tc struct {
    Num int
    Err error
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM