【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语言圣经)等。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/443986.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024重生之回溯数据结构与算法系列学习(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP;H3C-SE;CCIP——…

智能边缘计算 | 项目快速部署指南

在数字化浪潮的推动下,边缘计算与人工智能的深度融合正在成为推动智能社会发展的新动力。 边缘计算通过将数据处理和分析任务从中心服务器转移到更接近数据源的端侧,从而显著降低数据传输延迟,提高了响应速度和安全隐私性。在人工智能的加持…

python的特殊方法——魔术方法

前言 __init__(self[]) ​编辑 __call__(self [, ...]) __getitem__(self, key) __len__(self) __repr__(self) / __str__(self) __add__(self, other) __radd__(self, other) 参考文献 前言 官方定义好的,以两个下划线开头且以两个下划线结尾来命名的方法…

在QT中将Widget提升为自定义的Widget后,无法设置Widget的背景颜色问题解决方法

一、问题 在Qt中将QWidget组件提升为自定义的QWidget后,Widget设置的样式失效,例如设置背景颜色为白色失效。 二、解决方法 将已经提升的QWidget实例对象,脱离父窗体的样式,然后再重新设置自己的样式。

[ComfyUI]太赞了!阿里妈妈发布升级版 Flux 图像修复模型,更强细节生成,更高融合度以及更大分辨率支持

小伙伴们还记得我们之前介绍的阿里妈妈发布的 Flux 的 ControlNet 图像修复模型不,之前发布的是 Alpha 早期测试版本,说实话和 Flux 原生的重绘其实差距不大,有些方面甚至还是原生的效果更好。 但是现在,Alpha 的升级版本 Beta 版…

Stable Diffusion绘画 | 签名、字体、Logo设计

第1步,使用 PS(小白推荐使用 可画)准备一个 512*768 的签名、字体、Logo图片: 第2步,来到模型网站,搜索🔍关键词“电商”,找到一款喜欢的 LoRA: 第3步,选择一…

4.STM32-中断

STM32-中断 需求:红灯每两秒进行闪烁,按键key1控制绿灯亮灭 简单的程序代码无法满足要求 如何让STM32既能执行HAL_DELAY这种耗时的任务,同时又能快速响应按键按下这种突发情况呢 设置中断步骤 1.接入中断 将KEY1输入模式由原先的GPIO_In…

布隆过滤器基本原理与使用

目录 1.引言 2.基本定义 3.基本原理 4.实现方法 5.布隆过滤器的优缺点 6.哈希冲突和误判问题 7.大规模数据集Redis中布隆过滤器的性能优化 8.应用场景举例 1.引言 在互联网应用中,随着用户基数和交互数据的爆炸性增长,如何高效地处理点赞、签到、…

vue出现Component name “Politic“ should always be multi-word错误

效果 原因 组件名不能为单个单词,怕和html标签混淆 解决方法 1.选择多个单词区分 2.修改package.json里的rules规则,忽略文件命名校验

跨平台游戏的特点

跨平台游戏已成为视频游戏行业的主要趋势,这是由于对各种设备和操作系统之间无缝游戏的需求日益增长。这种方法允许玩家在多个平台(如游戏机、PC和移动设备)上享受他们最喜欢的游戏,同时保持相同的体验和进度。随着越来越多的开发…

【2024年最新】基于springboot+mysql就业信息管理系统

技术摘要 技术框架:以springboot作为框架,业务模式:B/S模式数据库:MySql作为后台运行的数据库服务器:使用Tomcat用为系统的服务器 系统展示 系统实现功能 本次实现一个就业信息管理系统,通过这个系统能够满…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第二十二章 安装VMware Tool 工具

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

ssrf学习(ctfhub靶场)

ssrf练习 目录 ssrf漏洞 漏洞形成原理(来自网络) 寻找ssrf漏洞, 靶场题目 第一题(url探测网站下文件) 第二关(使用伪协议) 关于http和file协议的理解 file协议 http协议 第三关&…

猫头虎分享已解决Bug || Error: ERESOLVE unable to resolve dependency tree 解决方案

🐯 猫头虎分享已解决Bug || Error: ERESOLVE unable to resolve dependency tree 解决方案 摘要 在前端开发中,尤其是使用 Node.js 和 npm 管理依赖时,ERESOLVE unable to resolve dependency tree 错误是很多开发者遇到的常见问题。这个 Bu…

jQuery 用户登录页面非空校验与登录测试

文章目录 实战介绍准备工作创建网页导入样式表和jQuery库编写页面代码编写脚本代码创建成功页面浏览网页和测试结束语 实战介绍 大家好,今天我们将一起学习如何使用jQuery来为用户登录页面进行非空校验和登录测试。通过这个实战项目,你将学会如何通过jQ…

新版 Notepad++ 下载与安装教程

一、软件准备:麻烦点我 二、双击下载好的 notepad 软件进行安装,选择 “简体中文”。 三、默认 “下一步” 安装。 四、单击 “我接受” 按钮。 五、自定义安装位置,个人建议安装在 D 盘。 六、选择组件,默认 “下一步”。 七、勾…

使用Diskgenius系统迁移

使用Diskgenius系统迁移 1、使用系统迁移2、注意点3、新备份的系统盘装在电脑上可能出现盘符错乱导致开机不进入桌面情况 1、使用系统迁移 参考视频: DiskGenius无损系统迁移,换硬盘无需重装系统和软件 2、注意点 1)新的硬盘里面的所有资料…

第十八篇:一文说清楚ICMP的底层原理

作为程序员或者网络工程师,有时候无法访问对方主机;导致这个现象的有很多原因,那要排查具体的网络原因,可能会用到ping的指令。而ping的底层实现是互联⽹控制报⽂协议(ICMP)。 ICMP 全称是 Internet Contr…

前端_002_CSS扫盲

文章目录 概念选择器常用属性背景边框高度和宽度颜色文本字体链接表格里对齐显示相关溢出,滚动条属性 伪类和伪元素 概念 1.书写格式: 选择器{ 属性名:属性值 ; 属性名:属性值 ; } 2.文件后缀.css 选择器 元素选择器 [tag] id选择器 #[id_name] c…

直线导轨在自动化设备中需要注意什么?

直线导轨属于精密传动配件,因而在使用时要求有相当地慎重态度,如果使用不当,也不能达到预期的性能效果,尤其是保管和保养不当,很容易造成导轨失效等问题,导致无法正常使用。因此,自动化设备中使…