Atitit go语言 golang 艾提拉总结特性优缺点

目录

1. Go 语言最主要的特性: 1

2. 体积大概100M 1

3. 问题 1

3.1. 编译速度和异常控制怎么样 1

3.2. 错误处理机制太原始 2

3.3. 1.6 禁止未使用变量和多余import 3

3.4. 孱弱的对象体系, 3

3.5. 缺乏泛型和元编程能力,这个相信做过框架类的玩家应该懂的。 3

4. Ide  Go 语言开发工具 4

4.1. LiteIDE 验证ok 4

4.2. Eclipse 5

4.3. Vscode 但是调试有问题 6

  1. Go 语言最主要的特性:
  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 反射
  • 语言交互性
  1. 体积大概100M
  1. 问题

    1. 编译速度和异常控制怎么样

貌似异常控制使用返回值模式不好呀

但是也有一些令人诟病的地方,其中Golang错误处理,"五行代码,三行错误处理"。那么怎么正确的处理和对待Golang错误处理机制呢?今天虫虫就和大家一起来说说Golang的错误处理。

在Golang错误处理中,变量名称err遍布各处。不论Golang项目有多大和多重要,普遍的格式化错误结构如下

编程语言都有"正常"的错误处理。为什么我应该使用这个奇葩垃圾的错误处理呢?

  1. 错误处理机制太原始

在Go语言中处理错误的基本模式是:函数通常返回多个值,其中最后一个值是error类型,用于表示错误类型极其描述;调用者每次调用完一个函数,都需要检查这个error并进行相应的错误处理:if err != nil { /*这种代码写多了不想吐么*/ }。此模式跟C语言那种很原始的错误处理相比如出一辙,并无实质性改进。实际应用中很容易形成多层嵌套的if else语句,可以想一想这个编码场景:先判断文件是否存在,如果存在则打开文件,如果打开成功则读取文件,如果读取成功再写入一段数据,最后关闭文件,别忘了还要处理每一步骤中出现错误的情况,这代码写出来得有多变态、多丑陋?实践中普遍的做法是,判断操作出错后提前return,以避免多层花括号嵌套,但这么做的后果是,许多错误处理代码被放在前面突出的位置,常规的处理逻辑反而被掩埋到后面去了,代码可读性极差。而且,error对象的标准接口只能返回一个错误文本,有时候调用者为了区分不同的错误类型,甚至需要解析该文本。除此之外,你只能手工强制转换error类型到特定子类型(静态类型的优势没了)。至于panic - recover机制,致命的缺陷是不能跨越库的边界使用,注定是一个半成品,最多只能在自己的pkg里面玩一玩。Java的异常处理虽然也有自身的问题(比如Checked Exceptions),但总体上还是比Go的错误处理高明很多。

  1. 1.6 禁止未使用变量和多余import

Go编译器不允许存在被未被使用的变量和多余的import,如果存在,必然导致编译错误。但是现实情况是,在代码编写、重构、调试过程中,例如,临时性的注释掉一行代码,很容易就会导致同时出现未使用的变量和多余的import,直接编译错误了,你必须相应的把变量定义注释掉,再翻页回到文件首部把多余的import也注释掉,……等事情办完了,想把刚才注释的代码找回来,又要好几个麻烦的步骤。还有一个让人蛋疼的问题,编写数据库相关的代码时,如果你import某数据库驱动的pkg,它编译给你报错,说不需要import这个未被使用的pkg;但如果你听信编译器的话删掉该import,编译是通过了,运行时必然报错,说找不到数据库驱动;你看看程序员被折腾的两边不是人,最后不得不请出大神:`import _`。对待这种问题,一个比较好的解决方案是,视其为编译警告而非编译错误。但是Go语言开发者很固执,不容许这种折中方案。

  1. 孱弱的对象体系

由于Go语言缺乏泛型和继承,而只能使用的类似ruby的brought/mixin来extend class导致go不太适合写业务逻辑,特别是多人合作开发业务逻辑。还是会写到处写不利于维护的重复代码。

  1. 缺乏泛型和元编程能力,这个相信做过框架类的玩家应该懂的。

其主要有以下几个方面的痛点:

·   编译慢

·   失控的依赖

·   每个工程师只是用了一个语言里面的一部分

·   程序难以维护(可读性差、文档不清晰等)

  1. Ide  Go 语言开发工具

    1. LiteIDE 验证ok

LiteIDE 是一款开源、跨平台的轻量级 Go 语言集成开发环境(IDE)。

支持的 操作系统

  • Windows x86 (32-bit or 64-bit)
  • Linux x86 (32-bit or 64-bit)

下载地址 :http://sourceforge.net/projects/liteide/files/

源码地址 :https://github.com/visualfc/liteide

  1. Eclipse

Eclipse 也是非常常用的开发利器,以下介绍如何使用 Eclipse 来编写 Go 程序。

  1. Vscode 但是调试有问题

(9+条消息)Go语言不爽 - yueguanyun的专栏 - CSDN博客.html

(9+条消息)Go语言不爽 - yueguanyun的专栏 - CSDN博客.html

Atitit go语言 golang 艾提拉总结特性优缺点 目录 1. Go 语言最主要的特性: 1 2. 体积大概100M 1 3. 问题 1 3.1. 编译速度和异常控制怎么样 1 3.2.相关推荐

  1. Atitit mis 管理信息系统概论 艾提拉著 目录 1. 互联网三大定律 2 1.1. 摩尔定律和 2 1.2. 吉尔德定律 电脑及网络宽带资源成为重要免费资源 2 1.3. 梅特卡夫定律 用户

    Atitit mis 管理信息系统概论 艾提拉著 目录 1. 互联网三大定律 2 1.1. 摩尔定律和 2 1.2. 吉尔德定律 电脑及网络宽带资源成为重要免费资源 2 1.3. 梅特卡夫定律 用户越 ...

  2. Atitit 关于艾提拉个人简绍 中文日文英文对照版

    Atitit 关于艾提拉个人简绍 日文版 经历了很多项目实践,具备较为宽广的IT从业与信息化工作背景,具备若干创业历程,道路曲折,初心不改.在相关领域累计了较深的深度(细化度)与高度(抽象度)与广度 ...

  3. 艾提拉近年来技术大总结

    ##基本信息 姓名:艾提拉    民族:汉  生日:1984.3 email:1466519819@qq.com 英文名&网名id : attilax 曾用名:艾龙 ##主要方向与目标: 技术 ...

  4. 大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 21

    大话数据结构读书笔记艾提拉总结 查找算法 和排序算法比较好 第1章数据结构绪论 1 第2章算法 17 第3章线性表 41 第4章栈与队列 87 第5章串 123 第6章树 149 第7章图 211 第 ...

  5. c语言n次方怎么输入_C语言实现斐波拉契数列

    C语言实现斐波拉契数列教程 怎么使用 C 语言实现计算斐波拉契数列的第 N 项的值? C语言实现斐波拉契数列详解 背景知识 斐波那契数列是一组第一位和第二位为 1,从第三位开始,后一位是前两位和的一组 ...

  6. 麦肯锡意识-艾森·拉塞尔、保罗·弗里嘉

    麦肯锡意识 作者:艾森·拉塞尔.保罗·弗里嘉 艾森·拉塞尔,曾担任麦肯锡公司咨询顾问,服务过的客户包括金融.电信.计算机和消费品等领域的众多知名公司. 麦肯锡意识 - 怎样从思维方式上,真正成为一个团 ...

  7. java异常类型和基本处理原则_Java异常控制机制和异常处理原则

    Java异常控制机制又被称为"违例控制机制". 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行.但并非所有的错误都能在编译期间侦测到,有些问题必须在运行期间解 ...

  8. 【转载】Java异常控制机制和异常处理原则

    转载自Java异常控制机制和异常处理原则 Java异常控制机制又被称为"违例控制机制". 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行.但并非所有的错误都能 ...

  9. TP5_接口开发之全局异常控制

    前言: 说到异常控制,也许很多会比较陌生,我身边很少人会去写抛异常的代码.但是异常用好了是非常的方便大家开发.首先我们来回顾下哪里可以看到异常,首先我们用框架开发的时候,我们的代码出错或者别的东西.如 ...

  10. call stack是什么错误_Go语言(golang)的错误(error)处理的推荐方案

    原文链接:https://www.flysnow.org/2019/01/01/golang-error-handle-suggestion.html 微信公众号:flysnow_org(飞雪无情) ...

最新文章

  1. LeetCode 1108. Defanging an IP Address--C++,Python解法
  2. 编写程序,输出所有3位数的水仙花数
  3. 是漏电,还是电磁辐射?
  4. java中d怎样转换D,Java中的一些基本转换
  5. Pycharm同步git代码提示:Merge failed
  6. 【附赠PPT】 KubeMeet 成都站回顾:让云原生应用交付和管理变得更简单
  7. 活动社交产品怎么设计排序算法?
  8. TypeScript模块系统、命名空间、声明合并
  9. HDU 6579 Operation (前缀线性基模板题)
  10. TeamCity构建依赖项
  11. Docker:尝试篇
  12. nginx解析漏洞简单复现及修复
  13. nvivo三天写论文!社会网络分析实战
  14. 小米浏览器html文件怎么打开方式,怎么设置浏览器-开启小米浏览器这三个功能,切换、搜索、编辑都让你事半功倍...
  15. wps怎么生成html,wps如何自动生成页码 wps页码设置详细方法
  16. 开启Google Chrome浏览器加速模式
  17. JavaScript实现的手风琴图片切换,鼠标悬停任意图片html前端源码
  18. 手机Web前端调试页面之——Chrome DevTools(谷歌浏览器)的模拟手机调试
  19. html根据ip和mac地址,关于怎么通过IE浏览器获取客户端的IP地址和Mac地址
  20. 都这样了!我还是没法关闭微信朋友圈广告

热门文章

  1. python linux调试_linux怎么调试python
  2. 微型计算机中硬盘工作时 应注意避免,1硬盘工作时应特别注意避免(B)
  3. 5 添加数据获得id_D3库实践笔记之元素定位与数据绑定 |可视化系列33
  4. 隐马尔可夫模型python_机器学习中的隐马尔科夫模型(HMM)详解
  5. 三星s6 html5测试分数,魅蓝s6安兔兔跑分有多少
  6. C语言 - setjmp与longjmp
  7. Memcache和Redis区别:
  8. 区块链教程Fabric1.0源代码分析流言算法Gossip服务端一兄弟连区块链教程
  9. 原 SpringFramework核心技术五:Spring AOP API
  10. 访问webservice,导入xml至本地数据集