PHP转Golang一些感想
JonnyShen · · 3632 次点击 · · 开始浏览由于某些原因参与到团队Golang项目的开发中,之前开发主要用的PHP,现在Golang用了也有较长一段时间了,就想着写篇博客分享下现在的一些感想,缕一缕Golang的优缺点。
缺点1:没有异常,Emmmm 等等... 它有!
用过Golang都懂,漫天遍野的err判断
if err != nil {
return err
}
最初让人很不爽,当然现在没好多少...
Golang其实有异常捕获机制panic/recover,但是没有错误捕获的机制,就是自定义异常或者说业务异常,比如数据库执行、api请求、文件处理等等,层层调用,很多时候上层可以不需要关心这类错误,完全只面向业务编程。这里细说起来真的很多东西,就不展开了。
缺点2:无依赖包管理
Golang官方目前没有给出最佳的依赖包管理,1.5之后可以通过vendor管理本地依赖包,对于有需要的团队也可以借助类似govenror的工具来实现。
讨厌的点
map×ばつ,what?为啥for循环读取map每次顺序都不一样。
跨包使用,为了简洁可能,/employee/user 和 /manager/user, 在其他包里都是 user.show(),不直观,但是也可以加个别名。
优点1:并发编程非常方便
只要一个go关键字就能搞定异步编程
...
go logRequest()
run()
并发编程也很简单,goruntine和channel就是支撑起Golang并发模型的基石
package main
import "fmt"
func sum(values [] int, resultChan chan int) {
sum := 0
for _, value := range values {
sum += value
}
resultChan <- sum // 将计算结果发送到channel中
}
func main() {
values := [] int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
resultChan := make(chan int, 2)
go sum(values[:len(values)/2], resultChan)
go sum(values[len(values)/2:], resultChan)
sum1, sum2 := <-resultChan, <-resultChan // 接收结果
fmt.Println("Result:", sum1, sum2, sum1 + sum2)
}
优点2:跨平台易部署
跨平台这个很多语言都支持,自不多说。咱们来说说部署,拿php举例,不是黑,开发个web服务,nginx+php+codefile 都是必须的,服务启停不太方便,虽然可以打个定制的rpm包,但着实需要费一番功夫。反观Golang,只需执行编译后的二进制文件就可以监听端口,实现web服务,部署利弊一目了然。
优点3:代码简洁
Golang推崇理念 "少即是多", 目标是简洁优雅,很多语法使用其他很简洁,但是不得不说有些开发者在开发过程中,编码精简如很多变量就一个字母,这样的精简感觉反而有违始终,失掉了代码的可读性,凡事得有个度。
优点4:优秀的命令行工具
go fmt/build/run/get,命令行很常用而且实用,特别得说fmt的出现直接让共同开发避免了书写不一致的情况,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难。
优点5:干很多类型的活
比如web服务、服务器应用(如日志分析处理)、客户端应用(win都可以)。。 简直不要太强大,虽然其他语言也有很多的覆盖面,但Golang不只是可以,是可以&&适合。有很多比如:Docker K8S nsq,devops领域里风生水起〜
写在最后
值得一提的是,Golang的标准库相对其他语言来说真的很丰富,Golang目前已经内置了大量的库,特别是网络库非常强大,我最爱的也是这部分。其他还有些优点,如自动垃圾回收、非入侵式接口和高性能等等。只能说,在这么多优点面前,Golang的那些缺点也显得瑕不掩瑜了,很香〜
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
由于某些原因参与到团队Golang项目的开发中,之前开发主要用的PHP,现在Golang用了也有较长一段时间了,就想着写篇博客分享下现在的一些感想,缕一缕Golang的优缺点。
缺点1:没有异常,Emmmm 等等... 它有!
用过Golang都懂,漫天遍野的err判断
if err != nil {
return err
}
最初让人很不爽,当然现在没好多少...
Golang其实有异常捕获机制panic/recover,但是没有错误捕获的机制,就是自定义异常或者说业务异常,比如数据库执行、api请求、文件处理等等,层层调用,很多时候上层可以不需要关心这类错误,完全只面向业务编程。这里细说起来真的很多东西,就不展开了。
缺点2:无依赖包管理
Golang官方目前没有给出最佳的依赖包管理,1.5之后可以通过vendor管理本地依赖包,对于有需要的团队也可以借助类似govenror的工具来实现。
讨厌的点
map×ばつ,what?为啥for循环读取map每次顺序都不一样。
跨包使用,为了简洁可能,/employee/user 和 /manager/user, 在其他包里都是 user.show(),不直观,但是也可以加个别名。
优点1:并发编程非常方便
只要一个go关键字就能搞定异步编程
...
go logRequest()
run()
并发编程也很简单,goruntine和channel就是支撑起Golang并发模型的基石
package main
import "fmt"
func sum(values [] int, resultChan chan int) {
sum := 0
for _, value := range values {
sum += value
}
resultChan <- sum // 将计算结果发送到channel中
}
func main() {
values := [] int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
resultChan := make(chan int, 2)
go sum(values[:len(values)/2], resultChan)
go sum(values[len(values)/2:], resultChan)
sum1, sum2 := <-resultChan, <-resultChan // 接收结果
fmt.Println("Result:", sum1, sum2, sum1 + sum2)
}
优点2:跨平台易部署
跨平台这个很多语言都支持,自不多说。咱们来说说部署,拿php举例,不是黑,开发个web服务,nginx+php+codefile 都是必须的,服务启停不太方便,虽然可以打个定制的rpm包,但着实需要费一番功夫。反观Golang,只需执行编译后的二进制文件就可以监听端口,实现web服务,部署利弊一目了然。
优点3:代码简洁
Golang推崇理念 "少即是多", 目标是简洁优雅,很多语法使用其他很简洁,但是不得不说有些开发者在开发过程中,编码精简如很多变量就一个字母,这样的精简感觉反而有违始终,失掉了代码的可读性,凡事得有个度。
优点4:优秀的命令行工具
go fmt/build/run/get,命令行很常用而且实用,特别得说fmt的出现直接让共同开发避免了书写不一致的情况,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难。
优点5:干很多类型的活
比如web服务、服务器应用(如日志分析处理)、客户端应用(win都可以)。。 简直不要太强大,虽然其他语言也有很多的覆盖面,但Golang不只是可以,是可以&&适合。有很多比如:Docker K8S nsq,devops领域里风生水起〜
写在最后
值得一提的是,Golang的标准库相对其他语言来说真的很丰富,Golang目前已经内置了大量的库,特别是网络库非常强大,我最爱的也是这部分。其他还有些优点,如自动垃圾回收、非入侵式接口和高性能等等。只能说,在这么多优点面前,Golang的那些缺点也显得瑕不掩瑜了,很香〜