当前位置: 首页 > news >正文

沐雪专业网站建设网站描述在哪里写

沐雪专业网站建设,网站描述在哪里写,做官网的步骤,屏蔽蜘蛛网站还会被收录吗什么是错误#xff1f; 错误表示程序中发生的任何异常情况。假设我们正在尝试打开一个文件#xff0c;但该文件在文件系统中不存在。这是一种异常情况#xff0c;表示为错误。 Go 中的错误是普通的旧值。就像任何其他内置类型#xff08;例如 int、float64 等#xff09…什么是错误 错误表示程序中发生的任何异常情况。假设我们正在尝试打开一个文件但该文件在文件系统中不存在。这是一种异常情况表示为错误。 Go 中的错误是普通的旧值。就像任何其他内置类型例如 int、float64 等一样错误值可以存储在变量中、作为参数传递给函数、从函数返回等。 错误使用内置error 类型表示。我们将在本教程后面详细了解该error类型。 例子 让我们立即开始尝试打开一个不存在的文件的示例程序。 package mainimport ( fmtos )func main() { f, err : os.Open(/test.txt)if err ! nil {fmt.Println(err)return}fmt.Println(f.Name(), opened successfully) }Run in playground 在上面程序的第 9 步中我们尝试打开路径中的文件/test.txt该文件显然不会存在于 Playground 中。包的*Open*函数os具有以下签名 *func Open(名称字符串) (File, error) 如果文件已成功打开则 Open 函数将返回文件处理程序错误将为 nil。如果打开文件时出现错误将返回非零错误。 如果函数或方法返回错误那么按照惯例它必须是函数返回的最后一个值。因此该Open函数返回error最后一个值。 **Go 中处理错误的惯用方法是将返回的错误与nil. nil 值表示没有发生错误非 nil 值表示存在错误。**在我们的例子中 我们检查错误是否不等于nil。如果不是nil我们只需打印错误并从主函数返回。 运行该程序将打印 open /test.txt: No such file or directory 完美。我们收到一条错误消息指出该文件不存在。 错误类型表示 让我们更深入地研究一下内置error类型是如何定义的。error是具有以下定义的接口类型 type error interface { Error() string }它包含一个带有签名的方法Error() string。任何实现此接口的类型都可以用作错误。此方法提供错误的描述。 当打印错误时fmt.Println函数内部调用该Error() string 方法来获取错误的描述打印方式 从错误中提取更多信息的不同方法 现在我们知道了error是一个接口类型让我们看看如何提取有关错误的更多信息。 在上面的示例中我们刚刚打印了错误的描述。如果我们想要导致错误的文件的实际路径怎么办获取此信息的一种可能方法是解析错误字符串。这是我们程序的输出 open /test.txt: No such file or directory 我们可以解析此错误消息并获取导致错误的文件的文件路径“/test.txt”但这是一种肮脏的做法。在较新版本的 Go 中错误描述可能随时更改我们的代码将会崩溃。 有没有更好的方法来获取文件名答案是肯定的这是可以做到的并且 Go 标准库使用不同的方式来提供有关错误的更多信息。让我们一一看看。 1. 将错误转换为基础类型并从结构体字段中检索更多信息 如果你仔细阅读Open函数的文档你会发现它返回一个类型为*PathError. PathError的错误它是一个结构体类型它在标准库中的实现如下 type PathError struct { Op stringPath stringErr error }func (e *PathError) Error() string { return e.Op e.Path : e.Err.Error() } 如果您有兴趣知道上述源代码存在于哪里可以在这里找到https://cs.opensource.google/go/go//refs/tags/go1.19:src/io/fs/fs .go;l250 从上面的代码中你可以明白是通过声明方法*PathError来实现的。此方法将操作、路径和实际错误连接起来并返回。因此我们得到了错误消息error interfaceError() string open /test.txt: No such file or directory Pathstruct 字段 包含PathError导致错误的文件的路径。 我们可以使用errors包中的As函数将错误转换为其基础类型。该As函数的描述谈到了错误链。请暂时忽略它。我们将在单独的教程中了解错误链和包装的工作原理。 简单的描述As是它尝试将错误转换为错误类型并返回 true 或 false 指示转换是否成功。 一个程序会让事情变得清晰。让我们修改上面编写的程序并使用该As函数打印路径。 package mainimport ( errorsfmtos )func main() { f, err : os.Open(test.txt)if err ! nil {var pErr *os.PathErrorif errors.As(err, pErr) {fmt.Println(Failed to open file at path, pErr.Path)return}fmt.Println(Generic error, err)return}fmt.Println(f.Name(), opened successfully) }Run in playground 在上面的程序中我们首先检查错误是否不在nil, 然后我们使用As的函数。 转换err为*os.PathError. 如果转换成功As将返回true。 如果您想知道为什么pErr是指针原因是错误接口是由指针实现的PathError因此pErr是指针。下面的代码显示了*PathError错误接口的实现。 func (e *PathError) Error() string { return e.Op e.Path : e.Err.Error() } 该As函数要求第二个参数是指向实现错误的类型的指针。因此我们通过了perr。 该程序输出 Failed to open file at path test.txt 如果底层错误不是*os.PathError 类型则打印一般错误消息。 太棒了。我们已经成功地使用该As函数从错误中获取文件路径。 2. 使用方法检索更多信息 从错误中获取更多信息的第二种方法是找出基础类型并通过调用结构类型上的方法来获取更多信息。 让我们通过一个例子更好地理解这一点。 标准库中的DNSError*结构*类型定义如下 type DNSError struct { ... }func (e *DNSError) Error() string { ... } func (e *DNSError) Timeout() bool { ... } func (e *DNSError) Temporary() bool { ... }该DNSError结构有两个方法Timeout() boolTemporary()它们返回一个布尔值指示错误是由于超时还是临时错误。 让我们编写一个程序将错误转换为*DNSError类型并调用上述方法来确定错误是暂时的还是由于超时造成的。 package mainimport ( errorsfmtnet )func main() { addr, err : net.LookupHost(baidu12345.com)if err ! nil {var dnsErr *net.DNSErrorif errors.As(err, dnsErr) {if dnsErr.Timeout() {fmt.Println(operation timed out)return}if dnsErr.Temporary() {fmt.Println(temporary error)return}fmt.Println(Generic DNS error, err)return}fmt.Println(Generic error, err)return}fmt.Println(addr) }注意DNS 查找在 Playground 中不起作用。请在您的本地计算机上运行该程序。 在上面的程序中我们正在尝试获取无效域名的IP地址baidu123.com。我们通过使用As该函数并将其转换为DNSError 来 获取错误的基本值。然后我们分别在14和18行检查错误是由于超时还是暂时错误的。 在我们的例子中错误既不是暂时的也不是由于超时造成的因此程序将打印 Generic DNS error lookup baidu12345.com: no such host 如果错误是暂时的或者由于超时那么相应的 if 语句就会执行我们可以适当地处理它。 3. 直接比较 获取有关错误的更多详细信息的第三种方法是直接与 类型的变量进行比较error。让我们通过一个例子来理解这一点。 包的Glob函数filepath用于返回与某个模式匹配的所有文件的名称。当模式格式错误时此ErrBadPattern函数将返回错误。 ErrBadPattern在包中定义filepath为全局变量。 var ErrBadPattern errors.New(syntax error in pattern) error.New() 用于创建一个新错误。我们将在下一个教程中详细讨论这一点。 当模式格式错误时Glob 函数将返回ErrBadPattern 。 让我们编写一个小程序来检查此错误。 package mainimport ( errorsfmtpath/filepath )func main() { files, err : filepath.Glob([)if err ! nil {if errors.Is(err, filepath.ErrBadPattern) {fmt.Println(Bad pattern error:, err)return}fmt.Println(Generic error:, err)return}fmt.Println(matched files, files) }Run in playground 在上面的程序中我们搜索格式[错误的模式文件。我们检查错误是否不为nil。为了获得有关错误的更多信息我们直接使用Is函数将filepath.ErrBadPatterninline 进行比较。与 类似As该Is函数在错误链上工作。我们将在下一个教程中了解更多相关内容。 出于本教程的目的如果传递给该函数的两个错误相同则Is可以将该函数视为true然后返回。 Is第 12 行返回 true 。因为错误是由于格式错误造成的。该程序将打印 Bad pattern error: syntax error in pattern 标准库使用上述任何一种方法来提供有关错误的更多信息。我们将在下一个教程中使用这些方法来创建我们自己的自定义错误 不要忽视错误 永远不要忽视错误。忽略错误会招致麻烦。让我重写示例其中列出了与模式匹配的所有文件的名称忽略错误。 package mainimport ( fmtpath/filepath )func main() { files, _ : filepath.Glob([)fmt.Println(matched files, files) }Run in playground 从前面的例子中我们已经知道是无效的。我通过_使用空白标识符忽略了函数返回的错误。我只是打印匹配的文件。该程序将打印 matched files [] 由于我们忽略了该错误因此输出看起来好像没有文件与该模式匹配但实际上该模式本身格式错误。所以永远不要忽视错误。 本教程到此结束。
http://www.hkea.cn/news/14292837/

相关文章:

  • 网站建设前期团队建设深圳大鹏新区葵涌街道
  • 网站开发 多语言免费网上咨询医生是哪个网
  • 北京网站建设的服务商中国建设银行企业信息门户网站
  • 网站域名备案流程刘涛做的婴儿玩具网站
  • 福州专门做网站出国自助游做攻略的网站
  • 深圳夜场网站建设托管中国建设信号工证网站
  • 门户网站素材福州网站建设名列前茅
  • 网站开发中常用的技术和工具最好的网站设计开发公司
  • 鹤壁百度网站建设培训培训网站建设
  • 国内哪家网站建设公司好wordpress手动安装
  • 专做logo网站叫什么地方福田蒙派克10座黄牌报价
  • 营销型网站模板免费下载深圳龙岗淘宝网站建设公司有哪些
  • 建设自己网站的流程图东莞建站多少钱
  • 网站开发专业定制西安推广公司
  • 网站做优化公司建设网站的公司兴田德润怎么联系
  • 受欢迎的昆明网站建设镇江门户网
  • 常熟市住房和城乡建设部网站重庆建设工程信息网哪里可以查看二级建造师已解锁
  • 设计模板网站中国有没有开源社区
  • 上海网站建设公司2018年做网站赚钱
  • 一个网站备案两个域名吗长沙市网站建设
  • logo设计在线生成免费网站永久免费虚拟主机
  • 做网站公司不给源码wordpress怎么分段
  • 公司内网网站建设软件外包开发保密协议
  • 江苏网站建设方案cms内容管理系统是什么
  • 哪个网站可以学做包子汽车之家app下载最新版
  • 广告网站设计方案自建网站过程
  • 大庆建设集团网站全球4a广告公司排名
  • 网站公司建设个服务号多少钱开发网站做什么
  • 建设银行网站查询做网站的收获及感想
  • html5网站都有那个网站检测