iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >这两个错误值有什么区别?
  • 760
分享到

这两个错误值有什么区别?

2024-04-05 00:04:31 760人浏览 泡泡鱼
摘要

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《这两个错误值有什么区别?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《这两个错误值有什么区别?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习

问题内容

我试图理解 golang 接口,我的问题是为什么 err2.what undefined。

这是一个简单的代码。输出表明 err 和 err2 与 *main.myerror 具有相同的类型,但 err2 没有字段“what”,因此 err 和 err2 之间肯定存在一些差异,但我无法弄清楚这里的差异。我刚开始学习 Golang 不久,任何帮助将不胜感激。

package main

import (
        "fmt"
        "time"
        "reflect"
)

type MyError struct {
        When time.Time
        What string
}

func (e *MyError) Error() string {
        return fmt.Sprintf("at %v, %s",
                e.When, e.What)
}

func run() error {
        return &MyError{
                time.Now(),
                "it didn't work",
        }
}

func main() {
        err := &MyError{time.Now(), "Hello"}
        fmt.Println(reflect.TypeOf(err))
        fmt.Println(err.What)   

        err2 := run()
        fmt.Println(reflect.TypeOf(err2))
        fmt.Println(err2.What)
}

预期输出:

main.myerror

你好

main.myerror

it 不起作用

实际输出:

\# 命令行参数 ./test.go:34:18: err2.what undefined(类型错误没有字段或方法what)


解决方案


函数run()返回类型为error的值,这是一个接口类型。是的,它包装了具体类型 *myerror 的值,但要访问 myerror 的字段,您需要使用 type assertion:

fmt.println(err2.(*myerror).what)

在Go Playground上试试。

请注意,error 类型的值可能包含其他具体类型的值,实际上是任何实现 error 接口的值。如果它包含其他类型的值,上述类型断言将导致运行时恐慌。

如果您不确定 err2 实际上持有 *myerror 类型的值,并且您想避免运行时恐慌,您可以使用类型断言的特殊形式来获取此信息,并且仅在情况如此时才采取行动:

if myerror, ok := err2.(*MyError); ok {
    fmt.Println(myerror.What) // Here myerror has static type *MyError
} else {
    fmt.Println("Some other error:", err2)
}

拨打 Go Playground 试试这个。

以上就是《这两个错误值有什么区别?》的详细内容,更多关于的资料请关注编程网公众号!

您可能感兴趣的文档:

--结束END--

本文标题: 这两个错误值有什么区别?

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 这两个错误值有什么区别?
    今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《这两个错误值有什么区别?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大...
    99+
    2024-04-05
  • Redis和Memcached两者有什么区别
    这篇文章主要讲解了“Redis和Memcached两者有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis和Memcached两者有什么区别”吧! Redis&nbs...
    99+
    2023-06-06
  • 两个DOM属性区别有哪些
    本篇内容介绍了“两个DOM属性区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!相同之处比如下面这个...
    99+
    2024-04-02
  • php异常处理和错误处理有什么区别
    PHP异常处理和错误处理之间有一些区别。1. 异常处理是一种更高级别的错误处理机制,允许程序捕获和处理运行时错误,而不会导致程序终止...
    99+
    2023-08-29
    php
  • vue.js和bootstrap两者之间有什么区别
    这篇文章主要讲解了“vue.js和bootstrap两者之间有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue.js和bootstrap两者之间...
    99+
    2024-04-02
  • = 和 := 赋值运算符有什么区别?
    实际上,它们都是赋值运算符,用于赋值,但它们之间的显着区别如下 -= 运算符赋值为SET 语句的一部分或作为 UPDATE 语句中 SET 子句的一部分,在任何其他情况下 = 运算符都被解释为比较运算符。另一方面,:= 运算符分配一个值,并...
    99+
    2023-10-22
  • JavaScript Angular与React:两者之间有什么区别?
    Angular和React都是用于构建用户界面的JavaScript框架。它们都有自己的优点和缺点,并且都适用于不同的项目。 Angular Angular是一个由谷歌开发的框架,它于2010年首次发布。它是一个全栈框架,这意味着它包含...
    99+
    2024-02-02
    Angular React JavaScript 框架 用户界面 组件 数据绑定 性能
  • Java里面取值(get)跟赋值(set)有什么区别
    1.功能意图 “get”方法的主要目的是从私有属性中提取值,而“set”方法是为私有属性赋予新的值。这两种方法是Java类的公共接口,允许外部代码访问和修改对象的状态。 2.方法定义 “get”方法通常命名为getProp...
    99+
    2023-10-29
    赋值 有什么区别 Java
  • Mysql各个版本有什么区别
    本篇内容介绍了“Mysql各个版本有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Mysql ...
    99+
    2024-04-02
  • nginx中的两个模块的proxy_pass的区别是什么
    本篇内容介绍了“nginx中的两个模块的proxy_pass的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.ngx_strea...
    99+
    2023-06-21
  • 为什么两个nil值有时候会不相等?
    ...
    99+
    2024-04-02
  • CentOS、Ubuntu、Debian三个linux有什么区别
    这篇文章主要介绍CentOS、Ubuntu、Debian三个linux有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!UbuntuUbuntu近些年的粉丝越来越多,Ubuntu有着漂亮的用户界面,完善的包管理...
    99+
    2023-06-10
  • PHP中传值与传引用有什么区别
    在PHP中,传值和传引用是函数参数传递的两种方式。1. 传值:函数传递的是实参的值的副本。在函数内部对参数的修改不会影响到外部的实参...
    99+
    2023-09-27
    PHP
  • SQL SERVER中SELECT和SET赋值有什么区别
    这篇文章主要介绍了SQL SERVER中SELECT和SET赋值有什么区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SELECT...
    99+
    2024-04-02
  • php异常和错误的区别有哪些
    这篇文章给大家分享的是有关php异常和错误的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php异常和错误的区别:1、PHP错误是属于php程序自身的问题,一般是由非法的语法,环境问题导致的;2、PHP...
    99+
    2023-06-14
  • 出现MySQL server has gone away这个错误的原因是什么
    本篇内容主要讲解“出现MySQL server has gone away这个错误的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“出现MySQL se...
    99+
    2024-04-02
  • /” 和 “\” 有什么区别
    键盘上的“/” 和 “\”这个两个“斜杠”有什么区别。 通常,“/”被叫作“正斜杠”,英语是forward slash,经常简称为slash。Windows命令用\,中文排版用/。而“\” 被叫作“反斜杠”,英语是backward sla...
    99+
    2023-09-25
    前端 java 服务器 Powered by 金山文档
  • C/C++值传递和址传递有什么区别
    这篇文章主要为大家展示了“C/C++值传递和址传递有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/C++值传递和址传递有什么区别”这篇文章吧。C/C++的按值传递和按地址传递有明显不...
    99+
    2023-06-25
  • CSS display:inline和float:left两者区别是什么
    本篇内容主要讲解“CSS display:inline和float:left两者区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS display:...
    99+
    2024-04-02
  • python中异常和错误的区别有哪些
    在Python中,异常和错误是两个不同的概念。1. 异常(Exception):是程序在运行时可能遇到的一些意外情况或错误。当程序发...
    99+
    2023-08-14
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作