由于某些原因参与到团队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

}

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 :=

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的那些缺点也显得瑕不掩瑜了,很香~

php简单还是go简单_PHP转Golang一些感想相关推荐

  1. 树形菜单 php,简单的树形菜单_php

    table {font-size = 9pt} td {height = 10px} /** * 构造树,初值为0 */ function tree(n) { var id = new Array(& ...

  2. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...

  3. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  4. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  5. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  6. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  7. 简单点儿、简单点儿、再简单点儿,其实世界可以不是我们想象的那么复杂

    一直抱着完美的架构理念埋头苦干了很多年,终于初步完成了通用权限的第一个稳定版本,也有各种各样几百个付费客户,也多多少少听到很多用户的反馈,虽然刚开始有些听不进去但是多想想人家还是说得很有道理. 按编程 ...

  8. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core Identity 迁移数据 - ASP.NET C ...

  9. ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...

最新文章

  1. vSphere 6.5 新功能 (1) - 全功能 vCenter S
  2. XML序列化和反序列化(C#)
  3. mysql创建新用户并分配数据库权限
  4. 【玩转cocos2d-x之三十六】Flappy Bird大集结
  5. 《Android安全技术揭秘与防范》—第8章8.5节Hook检测/修复
  6. python输出三角形周长_976. 三角形的最大周长(Python)
  7. hm编码工具使用_H.265视频编码与技术全析(下)
  8. oracle产生随机日期,Oracle生成随机日期时间
  9. 【英语学习】【Daily English】U05 Places L01 How can I get to the city museum?
  10. myeclipse copy问题
  11. 渗透测试工具——漏洞扫描工具
  12. 【游戏开发】卡牌游戏战斗系统设计与实现
  13. TM1622的程序设计实现
  14. 【前端前沿看点】React和Vue深度对比
  15. iOS和安卓共用同一个二维码实现跳转下载链接
  16. uni-app watch事件监听三种用法
  17. python画国际象棋棋盘图片_python3 turtle 画国际象棋棋盘
  18. xcode 快速生成代码块
  19. 面向对象三大特性-多态
  20. 捷联惯导算法与组合导航原理学习——等效旋转矢量和姿态阵转换(一)

热门文章

  1. RedisTemplate
  2. python xlsxwriter 在 flask 中的使用
  3. Prismatic 机器学习不一定得用大框架
  4. [原]消耗CPU资源的shell脚本
  5. JS开发利器-IxEdit傻瓜式JavaScript开发工具(附下载、汉化版、视频教程)
  6. 【python学习】模块random
  7. MY_SQLCode
  8. Tensor Decomposition
  9. Postgresql死锁的处理
  10. mysql 查询 字段是否为空