登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-04 22:18:34 443浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《在结构中打印 nil 错误时出现恐慌》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

当打印结构体中错误类型字段的 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 }
%!v(PANIC=runtime error: invalid memory address or nil pointer dereference)
{1 }

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
}

好了,本文到此结束,带大家了解了《在结构中打印 nil 错误时出现恐慌》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>