funcgetName()(firstName,middleName,lastName,nickNamestring){return"May","M","Chen","Babe"}错误处理提到多返回值,就接着说说错误处理,估计多返回值应用最多的场景就是第二个参数传回函数的错误状态;比如以下写法就很常见了:
ifresult,ok:=moreMagic();ok{/Dosomethingwithresult/}
c/c++对错误的处理一般都是通过错误码来确定一个函数是否正确调用,因此相比c/c++而言,go的错误处理代码行减少了,看上去也美观优雅;
go引入了3个关键字(defer、panic和recover)用于标准的错误处理流程;defer关键字的引入,保证错误处理的代码在发现错误时一定能够被调用,不会因为业务分支逻辑上的修改而漏调;
当然,看和谁比了,python的实践者认为没有使用trycatch的异常处理机制,让错误处理显得很繁琐;
RussCox指出Go语言是为大型软件设计的,Go语言的返回错误方式,不可否认,对于调用者不是很方便,但这样做会让程序中可能会出错的地方显的很明显。对于小程序来说,你可能只想打印出错误,退出程序。对于一些很精密的程序,根据异常的不同,来源的不同,程序会做出不同的反应,这很常见,这种情况中,try+catch的方式相对于错误返回模式显得冗长。
函数的地位提升函数作为“类型”出现,成为了一等公民;可以定义函数类型,将一个函数赋值给函数变量,然后在业务链中传递,这个在c++中只有使用std::function才能做到;还可以使用匿名函数(对应c++11中的lambda表达式),在语言层面支持函数编程,从而可以对程序进行更加灵活的控制和管理。强制的编码规范系统做大做久了,代码质量难免下降;开发人员的代码风格不一致,导致程序中充斥着千奇百怪的命名及类的组织方式;是的,是个公司就会有代码规范,但那只是写在纸面上的东西,是否真照着执行了,还真不好说;什么后期扫描,不改不给上线?为工程而生,go强制的编码规范,让人耳目一新,从命名、到代码排列组织方式都有明确的规定,不符合就不能编译通过!这个真得叫好;代码工程不是实现个性张扬的地方;哲学Go语言集众多编程范式之所长,并以自己独到的方式将它们融合在一起。程序员们可以用他们喜欢的风格去设计程序。相对于设计规则上的灵活,Go语言有着明确且近乎严格的编码规范。我们可以通过“gofmt”命令来按照官方的规范格式化代码。Go语言是强调软件工程的编程语言。它自带了非常丰富的标准命令,涵盖了软件生命周期(开发、测试、部署、维护等等)的各个环节。Go语言是云计算时代的编程语言。它