Go语言基础知识(一):基础介绍

news2024/9/23 23:00:00

一、简介

Go 语言又称 Golang,由 Google 公司于 2009 年发布,近几年伴随着云计算、微服务、分布式的发展而迅速崛起,跻身主流编程语言之列,和 Java 类似,它是一门静态的、强类型的、编译型编程语言,为并发而生,所以天生适用于并发编程(网络编程)。

目前 Go 语言支持 Windows、Linux 等多个平台,也可以直接在 Android 和 iOS 等移动端执行,从业务角度来看,Go 语言在云计算、微服务、大数据、区块链、物联网、人工智能等领域都有广泛的应用。所以当下学习正当时。

二、Go 语言的作者

在这里插入图片描述

Go语言之父们(从左到右分别是Robert Griesemer、Rob Pike和Ken Thompson)

Ken Thompson C语言 Unix 和 Plan9 的创始人之一,20世纪70年代设计并实现了 Unix 操作系统,还和 Rob Pike 设计了UTF-8编码。

Rob Pike 不但设计了 UTF-8 编码,还开发了分布式多用户操作系统 Plan9 Inferno 操作系统和 Limbo 编程语言。

Robert Griesemer 就职于 Google,负责 Chrome 浏览器中 Google V8 引擎的代码。

那天下午,在谷歌山景城总部的那间办公室里,罗伯·派克启动了一个 C++ 工程的编译构建。按照以往的经验判断,这次构建大约需要一个小时。利用这段时间,罗伯·派克和罗伯特·格瑞史莫、肯·汤普森坐在一处,交换了关于设计一门新编程语言的想法。

之所以有这种想法,是因为当时的谷歌内部主要使用 C++ 语言构建各种系统,但 C++ 的巨大复杂性、编译构建速度慢以及在编写服务端程序时对并发支持的不足,让三位大佬觉得十分不便,他们就想着设计一门新的语言。在他们的初步构想中,这门新语言应该是能够给程序员带来快乐、匹配未来硬件发展趋势并适合用来开发谷歌内部大规模网络服务程序的。

他们于2007年开始设计Go语言,于2009年正式对外发布。Go语言即具备python等动态语言的开发速度,又拥有C/C++等编译型语言的性能与安全性。又被称作21世纪的C语言,不但能够访问底层操作系统还提供了强大的网络编程和并发编程,分布式编程。

在 Go 语言项目开源后,Go 语言也迎来了自己的“吉祥物”,是一只由罗伯·派克夫人芮妮·弗伦奇(Renee French)设计的地鼠,从此地鼠(gopher)也就成为了世界各地 Go 程序员的象征,Go 程序员也被昵称为 Gopher 。
在这里插入图片描述

三、Go语言特性

开放源代码 Go本身就是用Go语言编写的。

快速 天下武功唯快不破,选择一门快速的语言例如C语言,却难以开发,编译速度依赖性运行时错误都非常多,要么有些语言依赖关系太多,最重要的一个就是解释器本身,例如Java语言需要虚拟机才能运行代码,javascript和node.js维护起来就是噩梦了。尤其是遇到回调。Go语言一开始设计就考虑到快速编译。他能像其他解释性语言一样,你不会注意他正在编译。Go语言实现了开发效率与执行效率的完美结合,让你像写Python(效率)代码一样编写C语言(性能)代码。
在这里插入图片描述

安全 作为强类型静态语言,并自带垃圾回收机制所以也具有安全性。因为Go的语言设计拥有像C语言那样操作指针,但是他通常不会像C语言那样危险,因为他内存是由Go自身进行管理的。

代码简洁 Go语言不仅在编译上快速,而且代码简洁明了,易于阅读。

已编译 不需要虚拟机支持,可直接编译成机器代码,编译后的文件也不需要依赖其他包文件。

跨平台 Go语言拥有的交叉编译,可以轻松编译到指定的平台上运行:例如OS X、Linux、Windows、Arm或者其他平台。

自动垃圾回收 程序在运行过程中的垃圾回收工作一般由Go运行时系统全权负责。不过,Go也允许我们对此项工作进行干预。

内置包 Go语言拥有几乎所有你能用到的标准库。例如http网络协议包,json解析包,time时间包等等。这种碎片化的东西在一个系统中占用大部分时间。

完整的构建工具 Go语言出色的内置命令工具,它自带了很多强大的命令和工具,通过它们,可以很轻松地完成Go程序的获取、编译、测试、安装、运行、分析等一系列工作。例如自动设置代码格式,检查代码存在的问题,go fmt命令每次保存后自动格式化代码。

原生的并发编程 并发在Go语言中属于一大亮点,并发的最小单元是协程,是一个微线程却有别于线程。协程由Go语言自身创建,并且由Go语言自身的运行时runtime调度。在其他语言中需要通过线程来解决的问题。一台电脑能够开启的线程数量是有限制的。在Go语言中可以很轻松开启一个协程来处理,因为协程很微型,不会占用电脑资源。一台电脑可以轻松开启成千上万个协程,在这个大数据的时代,能够处理大流量的数据能力的语言,并且能够简单快速开放的语言,非Go语言莫属了。

四、哪些公司在使用Go语言

Go社区中至少有100万名Go程序员。越来越多的公司都拥抱Go语言,最著名的使用Go语言的公司Google,Docker,Dropbox,Heroku,Uber等。国内的比如滴滴,腾讯,阿里,京东商城,爱奇艺,小米,360,美团,驴妈妈旅游网,斗鱼直播,探探 等等 都在使用Go语言。包括哔哩哔哩的后台也从java转向了Go 可见Go语言的受欢迎程度。你能想到的现代云计算基础设施软件的大部分流行和可靠的作品,都是用 Go 编写的,比如:Docker、Kubernetes、Prometheus、Ethereum(以太坊)、Istio、CockroachDB、InfluxDB、Terraform、Etcd、Consul 等等。当然,这个列表还在持续增加,可见 Go 语言的影响力已经十分强大。

五、GO语言项目

docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。

kubernetes :Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡

区块链:BTCD 是用go语言实现的完整节点的比特币实现

nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息

packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者

skynet:分布式调度框架

Doozer:分布式同步工具,类似ZooKeeper

Heka:mazila开源的日志处理系统

cbfs:couchbase开源的分布式文件系统

tsuru:开源的PAAS平台,和SAE实现的功能一模一样

groupcache:memcahe作者写的用于Google下载系统的缓存系统

god:类似redis的缓存系统,但是支持分布式和扩展性

gor:网络流量抓包和重放工具

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python_day2

猜数字-while循环 import randomnum random.randint(1, 10) while True:x int(input("输入&#xff1a;"))if x > num:print("大了")elif x < num:print("小了")else:print("猜对了")break打印九九乘法表-while循环 i 1 wh…

mysql中desc的两种用法---1、查询表结构和降序

Mysql中DESC的两种用法 1、查询表结构 语法&#xff1a; desc table_name&#xff1b; PS&#xff1a;此处desc是describe的缩写&#xff0c;用法&#xff1a; desc 表名/查询语句 2、降序 语法&#xff1a; select * from 表 order by 字段 desc select ename,sal from e…

华为Harmony应用开发初探

HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体…

VectorCAST软件安装

一、VectorCAST的安装 在 Windows 平台&#xff0c;安装文件是一个压缩文件&#xff08;zip 文件&#xff09;&#xff0c;请将其解压缩&#xff0c;解压缩后&#xff0c;找到 setup.exe&#xff0c; 双击运行&#xff0c;打开软件安装界面&#xff0c;之后在此界面点击 Next&…

利用python绘制二三维曲面和矢量流线图

为了实现不同数据的可视化&#xff0c;最近研究了python环境下的可视化方案&#xff0c;为后续的流体运动仿真模拟做好储备&#xff0c;由于python处理数据的便利性&#xff0c;导致目前很多后端处理或者可视化成图操作都在python中实现&#xff0c;比如前端是vue&#xff0c;加…

全国时尚CIO峰会丨实在智能:“数字员工”成企业数字化关键纽带

时尚&#xff0c;是不断演进的艺术。“中国时尚行业转型高峰论坛暨时尚行业CIO夏季峰会”作为时尚界的重要盛事&#xff0c;已经成为业界领袖、品牌大咖与创新者们的汇聚之地。近日&#xff0c;以“数智极智未来&#xff1a;新纪元 新生命”为主题的第八届时尚行业盛会在广东佛…

Linux驱动开发:Linux内核启动流程详解

前言&#xff1a;Linux 内核同样作为 Linux 驱动开发的 “三巨头” 之一&#xff0c;Linux 内核的启动流程要比 uboot 复杂的多&#xff0c;涉及到的内容也更多。但秉持着 “知其然知其所以然” 的学习态度&#xff0c;作者将给读者朋友大致的过一遍 Linux 内核的启动流程。(考…

Jmeter的常用设置(二)

文章目录 前言一、察看结果树响应结果是乱码_解决方法 方法一&#xff1a;在察看结果树之前添加 后置处理器 中的 “BeanShell PostProcessor” 来动态修改结果处理编码方法二&#xff1a;在配置文件中修改二、使用步骤 1.引入库2.读入数据总结 前言 接口测试中遇到的各种问题…

VN积分法卷径计算

卷径计算的其他方法请参看专栏的相关文章,链接如下: 卷径计算(V/N法)_RXXW_Dor的博客-CSDN博客卷径计算(厚度累计法/膜厚叠加法)_RXXW_Dor的博客-CSDN博客卷径计算的截面积法请参看下面的文章链接:卷径计算详解(通过卷绕的膜长和膜厚进行计算)_RXXW_Dor的博客-CSDN博客有关…

高清视频如何转成gif动画?手把手教你在线转换高清gif

说到gif动图相信大家并不陌生&#xff0c;随着gif表情包越来越火爆&#xff0c;大家也不满足于收藏转载别人的表情包了。都开始自己制作gif表情包了&#xff0c;那么&#xff0c;如何将视频转换成高清gif呢&#xff1f;很简单&#xff0c;使用GIF中文网的视频转gif&#xff08;…

Protobuf类型定义

"都甩掉吧&#xff0c;我们的世界一定会更美好&#xff01;其他不重要&#xff01;" 前面呢&#xff0c;我们讲了如何在Linux环境下安装Protobuf所需的库&#xff0c;那么本篇的着眼点在于Protobuf的编写以及语法规则。 什么是proto3? ProtocolBuffers语⾔版本3&am…

CClink IE转Modbus TCP网关连接三菱FX5U PLC

远创智控YC-CCLKIE-TCP 是自主研发的一款 CCLINK IE FIELD BASIC 从站功能的通讯网关。该产品主要功能是将各种 MODBUS-TCP 设备接入到 CCLINK IE FIELD BASIC 网络中。 远创智控YC-CCLKIE-TCP网关连接到 CCLINK IE FIELD BASIC 总线中做为从站使用&#xff0c;连接到 MODBUS-T…

[MMDetection]COCO数据集可视化验证

在使用MMDetection训练之前&#xff0c;需要对图像进行可视化验证&#xff0c;验证数据和标签是否对齐。 # 数据集可视化 import os import matplotlib.pyplot as plt from PIL import Imageoriginal_images [] images [] texts [] plt.figure(figsize(16,12))image_paths …

MySQL阶段_DAY17-DAY19(附笔记)

【注意】&#xff1a;管家婆知识的目录结构&#xff0c;一个针对于CRUD的小案例,也就是后端的CRUD 1、控制层 接收view传递的数据, 向service传递数据(调用service层) 向view返回结果 package controller;import java.util.List;import domain.ZhangWu; import servi…

路径规划算法:基于冠状病毒群体免疫优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于冠状病毒群体免疫优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于冠状病毒群体免疫优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要…

使用信号量Semaphore 实现多线程访问

一 semaphore多线程访问 1.1 代码 public class Xinhaoliang {public static void main(String[] args) {Semaphore semaphorenew Semaphore(3);for(int k1;k<8;k){final int mk;new Thread(new Runnable() {Overridepublic void run() {try {semaphore.acquire();Syste…

使用ResponseBodyAdvice返回值为String出现cannot be cast to java.lang.String异常

使用ResponseBodyAdvice返回值为String出现cannot be cast to java.lang.String异常 背景 由于项目中为了全局返回统一的JSON格式&#xff0c;使用ResponseBodyAdvice进行拦截&#xff0c;拦截的时候会将返回的信息统一一个对象返回到前端。但是有的同事将一个String的响应对象…

【Linux】高级IO(一)

文章目录 高级IO阻塞IO模型非阻塞IO模型多路转接IOselect简介socket 就绪条件select服务器select的优缺点多路转接的使用场景 高级IO 非阻塞IO&#xff0c;记录锁&#xff0c;系统V流机制&#xff0c;I/O多路转接&#xff08;I/O&#xff09;多路复用&#xff0c;readv 和 wri…

English Learning - L3 综合练习 10 口语语法串讲与思维回顾 2023.07.5 周三

English Learning - L3 综合练习 10 口语语法串讲与思维回顾 2023.07.5 周三 [知识点 1] 名词性从句问题&#xff1a;到底什么是名词笥从句&#xff1f;例 1&#xff1a;我的东西你都可以随便用例 2&#xff1a;不管是谁&#xff0c;放你鸽子就是混蛋例 3&#xff1a;说那种话的…

CMU15-445 2022 Fall 通关记录 —— Project 2:B+ Tree(下篇)

Project 2&#xff1a;B Tree Project #2 - BTree | CMU 15-445/645 :: Intro to Database Systems (Fall 2022) NOTE&#xff1a; 记录完成该Pro中&#xff0c;一些可能会遇到的问题&#xff1a; 本实验中&#xff0c;有很多API是需要自己去实现的&#xff0c;因此&#x…