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

137 天前
 jlak
楼主编程业余爱好者,用的最多的是 JS
一直想学一款编译型语言,写了几天 Go
虽然功能能实现 但是在错误处理方面感觉弄的很差
编码方式基本是写小函数然后组成中函数再组成大函数
这种编程方式不知道叫什么,使用 go 的话应该学习什么编程方式?
在体验的这几天里 最难搞的就是错误处理了
第一次接触这类的错误处理方式
好像是说每个可能出错的函数需要返回 error 或 nil
于是我给可能出错的小函数添加了 error 返回值
于是在中函数里调用这些小函数是不是也需要返回这个 error
然后大函数里调用到会返回 error 的中函数就需要返回 error 层层传递叠加
不知道我有没有解释清楚
2383 次点击
所在节点    Go 编程语言
25 条回复
jlak
136 天前
这代码写的一半是 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
136 天前
一个函数内写了 5 个 err 判断,前期真的很麻烦,后期 debug 是真方便。。。
p1gd0g
135 天前
这可是 errlang ,别挣扎了 /doge
NathanCyberC
134 天前
使用 Github copilot 相关 AI 工具,让它帮你写,要求它处理所有错误。
bunny189
132 天前
写点小代码我直接 panic……

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

https://www.v2ex.com/t/1063312

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

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

© 2021 V2EX