go error

1、go build报错:

../github.com/quic-go/quic-go/http3/client.go:8:2: cannot find package "log/slog" in any of:
        /usr/local/go/src/log/slog (from $GOROOT)
        /home/mijob/go/src/log/slog (from $GOPATH)
../github.com/quic-go/quic-go/internal/wire/transport_parameters.go:10:2: cannot find package "slices" in any of:
        /usr/local/go/src/slices (from $GOROOT)
        /home/mijob/go/src/slices (from $GOPATH)

把go 版本升级到1.21及以上。

报错:

module declares its path as: xorm.io/core
                but was required as: github.com/go-xorm/core

把代码从 github.com/go-xorm/core 改成 xorm.io/core

### Go语言中的错误处理 在Go语言中,`error` 是一种内置接口类型,用于表示程序执行期间发生的错误情况。该接口定义如下: ```go type error interface { Error() string } ``` 任何实现了 `Error()` 方法并返回字符串类型的类型都可作为 `error` 类型使用。 #### 创建自定义错误 可以创建自己的错误实现来提供更具体的上下文信息给调用者。下面是一个简单的例子展示如何构建一个带有额外字段的错误结构体[^1]: ```go package main import ( "errors" "fmt" ) // 定义一个新的错误类型 type MyError struct { msg string code int } func (e *MyError) Error() string { return fmt.Sprintf("code:%d, message:%s", e.code, e.msg) } func NewMyError(code int, msg string) error { return &MyError{msg: msg, code: code} } func divide(a, b float64) (float64, error) { if b == 0 { err := NewMyError(400, "除数不能为零") return 0, err } return a / b, nil } func main() { result, err := divide(10, 0) if err != nil { fmt.Printf("发生错误:%v\n", err) } else { fmt.Println(result) } } ``` 这段代码展示了如何定义新的错误类型以及怎样将其应用于实际场景之中。 #### 使用标准库函数进行错误处理 对于网络请求或其他I/O操作来说,通常会涉及到对标准库提供的API所抛出的异常做适当捕获和处理。这里给出一段基于HTTP客户端发送GET请求时可能出现的不同状况下的应对措施[^3]: ```go package main import ( "fmt" "io/ioutil" "log" "net/http" ) func fetchURLContent(url string) ([]byte, error) { resp, err := http.Get(url) if err != nil { return nil, fmt.Errorf("无法访问 URL %q: %w", url, err) } defer resp.Body.Close() body, readErr := ioutil.ReadAll(resp.Body) if readErr != nil { return nil, fmt.Errorf("读取响应失败: %w", readErr) } if resp.StatusCode >= 400 { return nil, fmt.Errorf("服务端返回状态码 %d", resp.StatusCode) } return body, nil } func main() { url := "https://api.example.com/data" content, err := fetchURLContent(url) if err != nil { log.Fatalf("获取内容失败: %+v", err) } fmt.Println(string(content)) } ``` 此示例说明了当遇到不同种类的问题(比如连接不上目标地址或是接收到非成功的HTTP状态码)应该如何优雅地报告这些异常事件而不至于让整个应用程序崩溃掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值