1.golang背景、特点介绍

背景介绍

Go 是 Google 开发的一种编程语言。 它于 2009 年由 Robert Griesemer、Rob Pike 和 Ken Thompson 作为开源项目发布。 从那时起,Go 语言就被用于开发其他众所周知的技术,如 Docker、Kubernetes 和 Terraform。 尽管 Go 语言在服务器端和云软件中广泛使用,但它是一种常规用途语言,具有丰富的不同用例。

Go 语言表现力强,且简单明了。 它在设计时考虑了惯用语言,这使程序员能够高效地编写高效且可靠的代码。 以 Go 语言编写的程序可以在 Unix 系统上运行,例如 Linux 和 macOS,也可以在 Windows 系统上运行。 Go 语言之所以值得注意,部分原因在于它独特的并发机制,使得编写可同时利用多个内核的程序非常容易。 它主要是一种强化静态类型的语言,这意味着变量类型在编译时是已知的。 不过,它确实具有一些动态类型化功能。

源启

  • 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。

  • 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。

  • 现有编程语言存在:风格不统一、计算能力不够、处理大并发不够好

  • 企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列的困扰需要解决。

特点

Go 语言与 C 语言有很多相似之处,它继承了 C 语言语法的许多方面,如控制流语句、基本数据类型、指针和其他元素等。 不过,该语言的语法和语义均超出 C 语言。 它还与 Java、C#、Python 等有相似之处。 一般情况下,Go 语言往往从其他编程语言中借用并调整功能,同时去掉了大部分复杂性。 例如,你可以在 Go 语言中使用一些面向对象的 (OO) 编程功能和设计模式,但并不完全实现整个 OO 范例。

Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发

  • 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。

  • 垃圾回收机制,内存自动回收,不需开发人员管理 【稍微不注意就会出现内存泄漏】

  • 天然并发【重要特点】 从语言层面支持并发,实现简单,goroutine,轻量级线程,可实现大并发处理,高效利用多核。

  • 基于CPS并发模型(Communicating Sequential Processes)实现

  • 吸收了管道通信机制,形成go语言特有的管道channel,通过管道channe,可以实现不同的goroute之间的相互通信 函数返回多个值(实例代码)

简单来说就是

  1. 简单、易学习、开源

  2. 高并发、高效执行

  3. 内存管理

  4. 语法简洁、数组安全、编译迅速快、跨平台

Go 原则

下面是 Go 编程语言的基本原理优势:

  • Go 许可证是完全开放源代码的。

  • Go 程序编译为单独的二进制文件,这样更易于共享和分发。

  • Go 支持交叉编译到各种平台和操作系统。

  • Go 语言致力于使语言变得简单,并用更少的代码行执行更多操作。

  • 并发是头等概念,使任何函数可以作为轻量级线程运行,而程序员只需少量工作。

  • Go 语言提供自动内存管理,包括垃圾回收。

  • 编译和执行速度很快。

  • Go 语言需要使用所有代码,否则会引发错误。

  • 有一种官方格式设置可帮助保持项目之间的一致性。

  • Go 语言具有大量全面标准库,并且可以在不使用第三方依赖项的情况下生成多个应用程序。

  • Go 保证语言与以前版本的后向兼容性。

Go 语言用例

  • 系统级应用程序

  • Web 应用程序

  • 云原生应用程序

  • 实用工具和命令行工具

  • 分布式系统

  • 数据库实现

Go语言主要使用领域有哪些?

Go语言和大多数服务器端编程语言一样,可以进行web相关应用的开发,其应用场景也比较多,比如服务器编程、分布式集群、中间件、网络编程、数据库、云平台等,其实通过这些年的发展来看,其更多的被应用在于游戏、区块链、云计算、人工智能、爬虫等领域.

代表著名项目

容器化领域: Docker、Kubernetes(k8s)、Consul、Traefik、Etcd、Argo等 Web框架:Gin、Beego、Echo、Revel、Goframe、Go-zero、Gorm等 数据库存储:tidb、influxdb等 微服务:go-kit、go-micro、Kitex、kratos、grpc-go等 区块链:以太坊协议(go-ethereum)、endermint、cosmos-sdk等 游戏开发:g3n、leaf、gonet、engo、nano、pitaya等等 其他:Grafana、Raft等

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

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

相关文章

EI会议论文的格式和模板在哪里可以找到?

要找到EI会议论文的格式和模板,首先访问会议的官方网站,这是最直接的途径。会议网站通常在下载中心或投稿指南中提供详细的模板和格式要求。此外,你也可以查阅会议通知邮件、合作出版社平台、往届会议论文,或者直接联系会议组织者…

go语言中的一个特别的语法 //go:embed 可将将静态文件内容读取到string, []byte和 embed.FS 变量并直接打包到exe包中

go语言中的一个特别的语法 //go:embed 看上去像是注释,实则是golang中的一个内置的语法,而且是仅在你的go代码编译时生效的语法, 借助他我们可以将我们的静态资源文件读取到FS直接打包到我们的exe执行文件中。 同时他还支持文件的模式匹配…

计算机网络学习小结_数据链路层

数据链路和帧 帧:数据链路层传输基本单元。链路层将网络层传过来的数据构成帧发到链路上,并将发到链路层的帧取出数据交给网络层 数据报/分组/包:网络层传输基本单元 三个基本问题 即封装成帧、透明传输、差错检测 封装成帧 概念&#…

Docker Portainer使用

Portainer是什么 Docker Portainer是一个轻量级的 Web UI 管理界面,可以用来管理Docker环境。它提供了一个直观的控制台,用户可以通过它来管理Docker主机、容器、网络、卷等Docker资源。 Portainer的主要功能和特点包括: 容器管理:可以查看、启动、停止、删除容器,以及查看容器…

正确解决pymysql.err.InternalError:(1049, Unknown error 1049)异常的有效解决方法

pymysql.err.InternalError: (1049,Unknown error 1049)这个异常通常表示客户端尝试连接到MySQL或 MariaDB服务器时出现了问题。错误代码 1049通常与数据库服务未运行、连接参数错误或数据库不存在有关。 为了解决这个问题,您…

对比解读国际R155法规和GB整车强标要求的差异性

附:汽车整车信息安全技术要求和R155法规文档,文末下载 在早期的汽车软件设计中,汽车本身很少与外界互联,并没有考虑太多的安全性。而随着电子电气架构的发展,大量的软件控制取代了机械控制,带来了ADAS、OT…

VSCODE调试C++(本人是openfoam求解器)时无法显示Vector,map等容器的值

一维数组&#xff1a; 可以在watch内添加表达式&#xff1a;*(type(*)[size])vectorName 例如&#xff1a;想查看vector<int> nums(6), 可以添加*(int(*)[6])nums。 上面是一维数组情况&#xff1a; ((double (*)[1000])&U[1000]) 表示从下标1000开始访问1000-200…

C++实现童年游戏

其中多处坐标的代码是经过运算移项推导出的 #include<easyx.h> #include<conio.h> #include<time.h> #include<stdio.h> bool Timer(int id, int ms)//计时器&#xff0c;过了多少毫秒就会返回真 {static long start[3] { 0 };long last clock();if…

关于linux的防护,以及群集你要知道的有哪些11-搭建Zabbix监控系统

1、zabbix具备功能 主机的性能监控、网络设备性能监控、数据库性能监控、多种警告方式、详细报表图表绘制 2、zabbix的监测对象 Linux服务器、Windows服务器、路由器、交换机等网络设备 3、zabbix的监控架构 server-client架构&#xff1a;适用于网络比较简单&#xff0c…

Qt 科目一考试系统(有源码)

项目源码和资源&#xff1a;科目一考试系统: qt实现科目一考试系统 一.项目概述 该项目是一个基于Qt框架开发的在线考试系统&#xff0c;主要实现了考试题目的随机抽取、考试时间限制、成绩统计等功能。用户可以通过界面操作进行考试&#xff0c;并查看自己的考试成绩。 二.技…

threejs的基本属性

1.创建场景,摄像机,渲染器,几何体,材质,网格 网格 物体材质 场景.add(网格),网格加入场景中 场景.add(坐标辅助器) 渲染 场景摄像机 相机的轨道控制器是个单独的对象 import ./style.css import * as THREE from three import { OrbitControls } from three/examples/j…

利用element实现简单右键

利用element-plus中的el-menu实现简单右键 实现如下 <template><main class"mainClass" contextmenu"showMenu($event)"> </main><el-menu:default-active"1"class"el-menu-demo"mode"vertical":col…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(一)---- 操作系统介绍与接口示例

MIT6.S081&#xff08;操作系统&#xff09;学习笔记 操作系统入门系列-MIT6.S081&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&a…

8.11 矢量图层线要素单一符号使用三(插值线)

文章目录 前言插值线&#xff08;Interpolated Line&#xff09;QGis设置线符号为插值线&#xff08;Interpolated Line&#xff09;二次开发代码实现插值线&#xff08;Interpolated Line&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中插值线&#xff08;Interpol…

基于地理坐标的高阶几何编辑工具算法(4)——线分割面

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 选中待分割面&#xff0c;点击“线分割面”工具&#xff0c;绘制和面至少两个交点的线&#xff0c;双击结束&#xff0c;执行分割操作 应用场景 快速切分大型几何面&#xff0c;以降低面的复杂度&…

496.下一个更大的元素

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

【Makefile】Makefile 编译 Keil 工程(Linux 环境)

本文使用的开发板为 stm32f103C8T6&#xff0c;使用的驱动库为stm32标准库。 目录 一、软件下载 1、stm32 标准库 2、arm-none-eabi 工具链 3、烧录器 二、Keil 工程改造 1、Keil 工程 2、基本 Makefile 工程 3、添加启动文件 4、添加链接脚本 5、去掉 core_cm3.c 三…

05Django项目--前端公共文件和其他html文件的适配

对应视频链接点击直达 Django项目--前端公共文件和其他html文件的适配 对应视频链接点击直达前端页面准备Pubilc页面设置 OVER&#xff0c;不会有人不会吧不会的加Q1394006513结语 接着上一节 前端页面准备 为了方便大家更好的复制&#xff0c;我把整个项目及templates文件夹和…

Buffer Pool中是如何管理Page页

Page页分类:在BP的底层采用的是链表数据结构管理Page。Page根据状态可以分为3中类型 1)free Page:空闲Page&#xff0c;未被使用的Page。 2)clean Page:被使用的Page&#xff0c;但是数据没有修改过。 3)dirty Page:脏页&#xff0c;被使用过的Page&#xff0c;并且数据被修…

FastDfs快速安装和数据迁移同步。Ubuntu环境

一&#xff1a;防火墙 ufw status 二&#xff1a;下载 分别是&#xff08;环境依赖&#xff0c;网络模块依赖&#xff0c;安装包&#xff09; git clone https://github.com/happyfish100/libfastcommon.git git clone https://github.com/happyfish100/libserverframe.git …