关于 Go 在 `Return Nil or Pointer to Empty Struct on Error` 上的讨论?

2022-08-12 11:47:48 +08:00
 ryan961
type User struct {}


// 1. return nil
func GetUser() (*User, err) {
	....
    
    return nil, err
}

// 2. return pointer to empty struct
func GetUser() (*User, err) {
	....
    
    return &User{}, err
}

个人会担心下游的不注意( nil 判断)导致进程 panic ,所以基本都是用第二种。想听听大家的意见或见解?

5185 次点击
所在节点    Go 编程语言
82 条回复
pastor
2022-08-17 13:11:39 +08:00
@frodez 我没用过 rust 所以不太了解,我不太清楚 option 和 result 是不是相当于类型断言,unwrap 是否需要程序员自己写出来?如果不需要,那是高级些,如果也需要程序员手写,那还是基本一样的效果
frodez
2022-08-19 21:22:53 +08:00
@pastor 需要,但是是一种更准确的强制措施,因为首先,你不先处理 result 或者 optional (哪怕是直接写上 unwrap )就无法拿到值;其次,反过来看 go 这边,你无法阻止 go 在返回时既返回值也返回 err ,就像楼主代码里的那样。rust 是强制,go 是约定,我是不觉得约定和强制“基本一样”的。

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

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

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

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

© 2021 V2EX