簡體   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