这是谷歌的代码
conn, err := net.Dial("tcp", "golang.org:80")
if err != nil {
// handle error
}
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
status, err := bufio.NewReader(conn).ReadString('\n')
// ...
我直接这样写可以吗
if err != nil {
return
}
我什么都不想做
这是谷歌的代码
conn, err := net.Dial("tcp", "golang.org:80")
if err != nil {
// handle error
}
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
status, err := bufio.NewReader(conn).ReadString('\n')
// ...
我直接这样写可以吗
if err != nil {
return
}
我什么都不想做
**一般在C和Go的优雅代码实现里, 都是哪里发生错误, 就给出相应错误信息, 做相应处理, 释放相应的资源, 及时终止执行, 避免if else的累赘嵌套, 保证代码的简洁和优雅, 建议养成良好的编码习惯, 做一个优雅有追求的程序员!**
go语言的优雅之处在于,它的异常处理是通过多值返回实现的。在go中try..catch
这样的异常处理形式是不存在的。这样的设计有利有弊,这样可以让代码在设计知识更加优雅清晰,但是这样也会造成异常无法捕捉难以调试等问题。
因此在go语言开发过程中的最佳实践是,让错误返回交由能够处理的过程进行处理:
import "errors"
func foo(a int) (ret int, err error){
if success{
reutrn 0,nil
}else{
return 1,errors.New("some error message")
}
}
可以通过如下方式处理子过程的异常:
if b,err := foo(123); err != nil{
fmt.Printf("there is something wrong %s",err.Error());
// release the resources
}else{
// success logic
}
那么对于你的例子,我的建议是将产生的错误返回,交由上层调用者进行处理:
if err != nil {
return err
}
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.4k 阅读
2 回答879 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.1k 阅读
这要看你在哪里,如果在函数里,就return那个函数要的返回默认值,如果在main里,还是多打一行至少让你自己知道是为啥结束了吧。
长一点的答案应该是这样:需要先设计好你程序是怎么处理错误的,即便全部fail掉,就是你这种纯return的,也要知道为什么死的。一般来说广泛采用的go范式是,函数返回多个值,其中一个是error值,那么你每一层函数遇到问题你就可以细化处理。如果不处理,error就冒泡上去,例:
处理的策略也千奇百怪,你可以采用fail,回滚,无视,等等。就看你怎么设计你的程序了。