go 错误处理 error

news/2025/2/22 23:20:22

普通错误处理

// 包路径
package main

import (
    "errors"
    "fmt"
)

func sqrt(f1, f2 float64) (float64, error) {
    if f2 < 0 {
        return 0, errors.New("error: f2 < 0")
    }
    return f1 / f2, nil
}

func sqrt1(f1, f2 float64) {
    if re, err := sqrt(f1, f2); err == nil {
        fmt.Println("计算没有错误,结果为:", re)
    } else {
        fmt.Println("计算发生错误,错误信息为:", err)
    }
}

//  main方法
func main() {
    
    // 错误机制是利用多个返回值机制实现
    
    // 计算没有错误,结果为: 1
    sqrt1(1.1, 1.1)
    
    // 计算发生错误,错误信息为: error: f2 < 0
    sqrt1(1.1, -1.1)
    
}

自定义error

package main

import (
    "log"
)

// 自定义异常类型
type CustomerDefinitionError struct {
    message string
}

// 实现Error方法,用来标记是自定义错误
// err CustomerDefinitionError 只读err
// err *CustomerDefinitionError 可以修改err
func (err *CustomerDefinitionError) Error() string {
    return err.message
}

// 注意抛出方法
func throwUDError() error {
    return &CustomerDefinitionError{"错误信息!!!"}
}

func main() {
    log.Println("main ...")

    err := throwUDError()
    log.Println(err.Error())

    // 类型的判断
    if pathErr, ok := err.(*CustomerDefinitionError); ok {
       log.Println("This is user definition error", pathErr)
    }

    switch vt := err.(type) {
    case *CustomerDefinitionError:
       log.Println("This is user definition error", vt)
    default:
       log.Println("other type error")
    }

    log.Println("success ..")
}


http://www.niftyadmin.cn/n/5862838.html

相关文章

Python中的Flask深入认知搭建前端页面?

一、Flask 的介绍 1. 什么是Flask&#xff1f; Flask 是一个轻量级的 Python Web 框架&#xff0c;因其简单易用、灵活性高而广受欢迎。它适合快速开发小型应用&#xff0c;也可以通过扩展支持复杂的功能需求。可以结合 HTML、CSS 和 JavaScript 实现丰富的交互功能。 2. 核…

【C# 数据结构】队列 FIFO

目录 队列的概念FIFO (First-In, First-Out)Queue<T> 的工作原理&#xff1a;示例&#xff1a;解释&#xff1a; 小结&#xff1a; 环形队列1. **FIFO&#xff1f;**2. **环形缓冲队列如何实现FIFO&#xff1f;**关键概念&#xff1a; 3. **环形缓冲队列的工作过程**假设…

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-split_dota.py

split_dota.py ultralytics\data\split_dota.py 目录 split_dota.py 1.所需的库和模块 2.def bbox_iof(polygon1, bbox2, eps1e-6): 3.def load_yolo_dota(data_root, split"train"): 4.def get_windows(im_size, crop_sizes(1024,), gaps(200,), im_rate_t…

中文Build a Large Language Model (From Scratch) 免费获取全文

中文pdf下载地址&#xff1a;https://pan.baidu.com/s/1aq2aBcWt9vYagT2-HuxdWA?pwdlshj 提取码&#xff1a;lshj 原文、代码、视频项目地址&#xff1a;https://github.com/rasbt/LLMs-from-scratch 翻译工具&#xff1a;沉浸式翻译&#xff08;https://app.immersivetrans…

智能合约的部署

https://blog.csdn.net/qq_40261606/article/details/123249473 编译 点击图中的 “Compile 1_Storage.sol” 存和取一个数的合约&#xff0c;remix自带 pragma solidity >0.8.2 <0.9.0; /*** title Storage* dev Store & retrieve value in a variable* custom:d…

输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路

详细前端代码写于上一篇&#xff1a;输入搜索、分组展示选项、下拉选取&#xff0c;el-select 实现&#xff1a;即输入关键字检索&#xff0c;返回分组选项&#xff0c;选取跳转到相应内容页 —— VUE项目-全局模糊检索 【效果图】&#xff1a;分组展示选项 >【去界面操作体…

在工作中PostgreSQL常用的SQL命令

1. 查看所有数据库 \l 或 SELECT datname FROM pg_database; 2. 查看当前数据库中的所有表 \dt 或 SELECT table_name FROM information_schema.tables WHERE table_schema public; 3. 查看所有表空间 \db 或 SELECT spcname FROM pg_tablespace; 4. 查看所有用户&…

Lua C API :lua_insert 函数详解

lua_insert 是用于操作 Lua 栈的函数&#xff0c;其作用是将栈顶的元素移动到指定的位置。它允许我们调整栈中元素的顺序&#xff0c;非常适用于需要对栈中数据顺序进行操作的场景。 1. 函数简介 lua_insert 是 Lua C API 提供的一个栈操作函数&#xff0c;它将栈顶的元素插入…