请问下 go 语言的错误如何处理

2024-08-07 19:41:19 +08:00
 jlak
楼主编程业余爱好者,用的最多的是 JS
一直想学一款编译型语言,写了几天 Go
虽然功能能实现 但是在错误处理方面感觉弄的很差
编码方式基本是写小函数然后组成中函数再组成大函数
这种编程方式不知道叫什么,使用 go 的话应该学习什么编程方式?
在体验的这几天里 最难搞的就是错误处理了
第一次接触这类的错误处理方式
好像是说每个可能出错的函数需要返回 error 或 nil
于是我给可能出错的小函数添加了 error 返回值
于是在中函数里调用这些小函数是不是也需要返回这个 error
然后大函数里调用到会返回 error 的中函数就需要返回 error 层层传递叠加
不知道我有没有解释清楚
2854 次点击
所在节点    Go 编程语言
25 条回复
jlak
2024-08-09 00:57:32 +08:00
这代码写的一半是 err 判断的感觉
···go
func GetFileName(hash string, sid string) (string, error) {
apiUrl := Url + "/api/v2/torrents/files"
data := url.Values{}
data.Add("hash", hash)
req, err := http.NewRequest("POST", apiUrl, strings.NewReader(data.Encode()))
if err != nil {
return "", fmt.Errorf("创建请求失败: %w", err)
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Cookie", "SID="+sid)

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return "", fmt.Errorf("请求失败: %w", err)
}
defer resp.Body.Close()

if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("服务器返回错误状态码: %d", resp.StatusCode)
}

body, err := io.ReadAll(resp.Body)
if err != nil {
return "", fmt.Errorf("读取响应体失败: %w", err)
}

var data []Data
if err := json.Unmarshal(body, &data); err != nil {
return "", fmt.Errorf("解析 JSON 失败: %w", err)
}

if len(data) == 0 {
return "", fmt.Errorf("未找到文件数据")
}

return data[0].Name, nil
}
···
jlak
2024-08-09 01:37:17 +08:00
一个函数内写了 5 个 err 判断,前期真的很麻烦,后期 debug 是真方便。。。
p1gd0g
2024-08-09 09:55:07 +08:00
这可是 errlang ,别挣扎了 /doge
NathanCyberC
2024-08-10 09:20:13 +08:00
使用 Github copilot 相关 AI 工具,让它帮你写,要求它处理所有错误。
bunny189
2024-08-12 20:27:21 +08:00
写点小代码我直接 panic……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1063312

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX