【GO】Go语言初探

文章目录

最近在学习Go语言,过程中产生一些思考,在这里分享出来。

一、简介

C语言相对而言比较原始,C++语言又过于复杂,对于一部分人而言学习Go语言似乎变成了一件很有性价比的事情。而对于有C/C++基础的同学来说,学习Go语言就变得非常容易。

Go语言,Go Language,简称Golang或Go,是一门由Google公司开发的静态类型、编译型的编程语言。其设计理念是提供一种直观、简洁、可靠的解决方案,以应对现代软件开发中所面临的挑战。

二、设计初衷

Google设计开发Go语言大致基于以下三个方面的原因:

  • 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。
  • 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。【现有的编程语言: 1.风格不统一; 2.计算能力不够; 3.处理大并发不够好】
  • 企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列的困扰需要解决。

基于以上原因,在Rob Pike, Ken Thompson 和 Robert Griesemer三位大佬的带领下(真的是业界大佬,感兴趣可以搜搜人物经历,每一个拎出来都是计算机届响当当的人物),该项目于2007年启动,并于两年后的2009年11月正式开源。

有一个问题不知你有没有想过:你目前最熟悉的语言是哪一种?它有多久的历史了?

可能它也一直在不断更新,并且被全球开发者广泛使用。但是,摩尔定律告诉我们半导体的发展日新月异,某些之前可能会狠狠制约开发者开发程序的条件(比如内存容量),如今可能早已不复存在;某些之前可能不是很重要的因素,如今可能成为绕不开的话题(比如并发处理)。

相对应的,这些语言在诞生之初的那个时代能够解决当下的问题,但是随着计算机的发展,就算打再多的"补丁",它们也无力提供最完美的解决方案。而这个时候,Go就出现了,作为一门"比较现代"的编程语言,很自然的,它会想办法消除那些"非现代"编程语言犯下的错误(毕竟有些坑已经有人踩过了),并着力解决当下开发者的痛点。

三、语言特点

Go语言保证了既能达到静态语言的安全和性能,又能达到动态语言开发维护的高效率。使用一个表达式来形容Go语言:Go=C+ Python,说明Go语言既有C静态语言程序的运行速度,又能达到 Python 动态语言的快速开发。

  1. 从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针。
  2. 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
  3. 垃圾回收机制,内存自动回收,不需开发人员管理。
  4. 天然并发(重要特点):
    1. 从语言层面支持并发,实现简单。
    2. goroutine,轻量级线程,可实现大并发处理,高效利用多核。
    3. 基于 CPS 并发模型(Communicating Sequential Processes)实现。
  5. 吸收了管道通信机制,形成Go语言特有的管道 channel 通过管道 channel,可以实现不同的 goroute之间的相互通信。
  6. 函数可以返回多个值。
  7. 新的创新,比如切片,延时执行defer。

四、应用领域

  • 区块链研发
  • Go服务器端/游戏软件开发
  • Golang分布式/云计算软件开发

五、如何学习

说实话,我至今并没有觉得有哪本关于GO编程的书写的比较适合初学者入门,有的过于简单,有的过于深奥,再也找不到一本比较系统性的介绍GO编程的书,再加上GO还很年轻,版本发布的比较勤,一些新的语言特色可能随时会被加入其中,这些因素都对想入门的同学造成了一些困难。

这里推荐以Go By Example程序实践介绍页面作为入门教程,GO 101也是一本比较不错的电子书,还有《The Go Programming Language》(Go语言圣经)等。

一门合格的程序员应该掌握几门编程语言。一方面,你学习不同的语言时会对它们有所比较,这会让你有更多的思考。另一方面,掌握多门编程语言是对学习能力的培养,会让你在学习未来的新技术时学的更快。

相关推荐
懒大王爱吃狼21 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷1 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
待磨的钝刨1 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck3 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
励志成为嵌入式工程师4 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer5 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
码农小旋风5 小时前
详解K8S--声明式API
后端
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端