教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang使用感受

Golang使用感受

发布时间:2023-03-14   编辑:jiaochengji.com
教程集为您提供Golang使用感受等资源,欢迎您收藏本站,我们将为您提供最新的Golang使用感受资源

之前一段时间,我曾经做过一些有关Golang的介绍。最近从使用Golang的过程中,又有一些新的感受,与大家分享一下。我比较反对语言之间的比较,一门编程语言能做什么,取决于用户用它做了什么,而一门语言擅长于做什么,取决于用户经常用它做什么,它的语法在解决哪个领域的问题比较有优势。我只是单纯站在一门语言的角度,来谈谈自己对它的客观看法。

Golang能做什么?目前我使用Golang做过Web应用,树莓派上的应用,Linux和Windows系统下的应用。总结起来,Golang可以开发主流操作系统下的应用。嵌入式开发我也曾想过,但是目前使用Golang的嵌入式开发库比较少,估计是语言影响力的问题,暂且搁置。Web应用使用了gin,gorm,casbin等开源框架,由于Golang比较适合于做分布式应用,所以这方面的框架都很轻巧好用。树莓派应用换句话说是ARM下的Linux开发,Linux开发就是平时的x86或x64下的应用开发,Windows下的开发也是x86或x64下的开发。Golang的编译器集成了交叉编译,只需要在go build前指定GOOS和GOARCH两个环境变量,就可以编译出不同cpu架构和不同操作系统的应用。当然,前提是你的应用都是采用Golang的包开发的,否则也会有平台移植问题,毕竟Golang是编译型语言,不同操作系统的系统调用和库还是有区别的。

Golang的语法集非常小,概念也少,但是正因为如此,Golang的使用需要比较好的软件开发功底。你需要对面向对象编程有深入理解,需要了解鸭子类型,需要了解面向接口编程的理念等等,才能使用Golang写出好的代码。你需要明白使用C/C 开发时候的各种问题,才能感受到Golang的改进之处,它是如何做到了性能和语言结构的权衡。所以,有人说,Golang不是面向初学者最好的语言,无法做到像Python那样吸引人,我觉得的确如此。

Golang比较被人诟病的是它的error机制,Golang建议,如果一个函数或者方法有返回值(或者有错误分支),那么一定要返回一个error接口的实例,避免C/C 中使用不同返回值数值表示不同含义的问题(0成功,1失败,诸如此类),如果有多个返回值,则error实例应该是最后一个。导致的结果是,代码中到处都是error的判断和返回错误。初用感觉这样确实多了很多所谓的多余代码,但实则不然,这是Golang在语法层面上帮助开发者实现代码的严谨性。如果回头看看我们之前做过的代码,你会发现,不管你当时是否考虑到了问题,大部分补丁,都是针对错误的,而且代码的大部分内容,也是在处理错误分支。正确的分支和错误分支是相对的,我们为了保证正确分支的正确性,必然要对错误分支进行处理,这样才能实现逻辑上的全覆盖。Golang利用编码过程中的冗余和重复,避免了我们将来回头找问题的困难。也就是说,使用Golang,如果你的封装做的足够好,函数的粒度适中,你的error就很难扩散,总是在它出现的第一现场就被检查,你可以继续返回给上层,也可以转换成其他error传递出去,还可以直接拦截处理或者打印。未来排查问题时,你会发现,你定位问题的速度极大提高。

Golang最让我开心的是它编译出来结果就是一个可执行文件,对于部署提供了极大地便捷。我们可以直接把程序放在需要的地方,双击就可以使用;也可以将它配置为系统服务,做一些系统级的处理;还可以封装到docker,利用docker和k8s简单地实现分布式。

Golang的协程和通道使用十分方便,提供的机制非常底层,但是使用起来比较简单。不过,这里的坑也不少,尤其是通道的使用,之前很简单的把通道当做了数据有序传递的管道,但是我这样的理解缺少了一个组件——协程,通道应该是协程间数据有序传递的管道,不在异步的环境下使用管道,不管你的管道是否有缓冲,都是在给程序创造死锁的机会。

Golang也存在一些问题。Golang实现接口的方式很简单,只需要结构实现这个接口的所有方法就可以了,但是带来的一个问题就是我们很难找到我们结构到底实现了哪个接口,不过有一个反作用,当你试图实现一个接口的时候,你发现,你好像已经实现了这个接口,只是你起的方法名不太一样,那么,改改方法名就可以了,也可以对已有方法使用接口的方法名进行封装。Golang的结构如果不传递指针,会进行值拷贝,但是注意,这里是值拷贝,并不是深拷贝,如果结构内包含的字段有slice,map,指针等类型,这些并没有进行深拷贝,我们使用的还是同一块内存的内容。

以上就是我使用了一段时间Golang之后的一些想法,拿来与大家分享一下,不过整体来说,我还是比较喜欢Golang的风格和开发方式,毕竟它也被Google定义为C/C 的替代,而我曾经做C/C 比较多,确实感受到了Golang在这方面的改进,而Golang的开发理念,思想和性能又都有C/C 的影子。这种感觉,我很喜欢。

 

到此这篇关于“Golang使用感受”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang使用感受
golang 动态生成函数_GoLang的优点和缺点
Go 语言 2019 调查报告发布
golang(go语言)消息传递(管道)方法实现发送多个get请求
Golang-对象方法和实现接口时,方法接受者是指针还是对象的区别
还看不懂同事的代码?Lambda 表达式、函数接口了解一下
使用Go语言一段时间的感受
Golang 在 VSCode 中的调试配置
golang经典面试问题汇总
为什么Go中有的自定义error会导致内存溢出

[关闭]
~ ~