返回顶部
首页 > 资讯 > 后端开发 > GO >在结构中打印 nil 错误时出现恐慌
  • 313
分享到

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

2024-04-04 23:04:36 313人浏览 独家记忆
摘要

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

小伙伴们对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 <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
}

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

您可能感兴趣的文档:

--结束END--

本文标题: 在结构中打印 nil 错误时出现恐慌

本文链接: https://lsjlt.com/news/596848.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作