两种都可以,看场景。
【 在 hothail (沸冰!无尽的华尔兹) 的大作中提到: 】
: 技术上都可以,但实践上哪种实现比较合适?
: 方式A
: func funA() (structA,error){
: return structA{},nil
: }
: 方式B
: func funB() (*structA,error){
: return &structA{},nil
: }
: 方式A:感觉是一种go风格,也算合理,但多处写structA{}感觉很冗余,另外会不会性能下降?
「冗余」是代码组织的问题,和指针不指针没关系。不用指针性能肯定会差一些。
: 方式B:和原来的C风格接近,但error是不是显得多余了,调用者可以直接用 p==nil判断是否有效
理论上你说得对,但实践中 error 和指针并存很常见,理由很简单,nil 只能指示出错,但无法指示错误原因。C 里面强行把两个信息合并到一起,是因为 C 不支持多个返回值,Go 不存在这个问题,所以该用 error 就用吧。
: 延伸一下:
: golang中是推荐用指针么?
: 是要避免使用指针,还是给了一种“好用”(托管内存)的指针呢?
和 C 一样,该用就用,不该用就别用,没什么一定之规。
不过稍大一点的结构体在作为参数或者返回值的时候,一般都是用指针的,C 也一样。
--
修改:flw FROM 27.38.241.*
FROM 27.38.241.*