Go语言编程系列(一)

简介: Go语言编程系列(一)

Golang的巨大性能优势,行业案例

需求场景

①、主要二次开源云原生的CRD,自定义控制器,包括CRD的操作者自定义

②、K8S的二次开发,prometheus基于吞吐量做扩容的时候,官网的定义的CRD

没有实现高并发,需要二次开发

Golang语言产生的背景主要有以下几个方面:

①、并发编程需求:对比其他语言:

java性能问题:系统调用耗费太多的CPU

c++是内存管理的问题:出现内存管理的太复杂,很出现容易内存泄漏

因此,Google公司希望开发一种新的编程语言,既有java的内存管理能力和c++的

性能,而且更加的简洁,易于学习和使用

Go语言的特色

1、高并发:Go语言原生支持协程和通道,可以轻松实现高并发程序,并且在

多核,分布式等场景下表现优异。java也支持高并发,但是在底层的线程的调度这

块没有Golang做的好,并发性更高一些

1.1、Go语言使用了goroutine:轻量级线程和channel通道的方式,可以轻松实现并

发编程,避免了多线程编程中的一些问题。java是重量级线程:java8线程和操作系

统的线程是1对1的绑定关系。而在golang当中是很多个协程对应一个操作系统线

程。

1.2、java中的线程睡眠,线程切换等涉及到的操作系统层的重量级调用,就是线

程切换或者加锁解锁都是因为需要用户态和内核态的切换,从而导致的开销大。发

生系统调用,一个应用程序从用户态到内核态,就需要执行系统调用用户态转化到

内核态,需要执行系统调用,保存现场,也就是保存用户态的寄存器等然后去系统

调用,并在内核态执行,最后恢复现场,并且由于内核对于用户的不信任,因此

内核需要对用户进行一些额外的检查,这就需要更耗费更多的工作了。

1.3、尽管系统调用使用了“快速系统调用”指令,但耗时仍大约在200ms+,多的可

能到十几us每个系统调用内核更进行许多工作,大约需要执行1000条左右的CPU

指令。

2、内存安全性:Go语言通过垃圾回收机制和指针限制等手段,避免了常见的内存

错误(如缓冲区溢出,野指针等),提高了程序的可靠性。借鉴了 JVM的垃圾回收机

制。

2.1、这个内存安全相对于C++语言来说的,C++语言是手动的来内存分配和释放

的:要求开发人员的水平比较高,如果不小心导致内存泄漏的话就会造成程序崩

溃。

2.2、自带的内存管理机制,避免了没有及时回收导致的内存泄漏和程序崩溃等

等。GC性能可能随着版本不断更新会不断优化,go团队中有HotSpot开发者,应

该会借鉴jvm gc的设计思想,比如分代回收,safepoint等。

3、快速编译:Go语言的编译速度很快,即使在大型项目中也不会出现明显的编译

延迟,同时Go语言生成的可执行文件体积小,运行速度快,不耗费资源。

4、简单易学:Go语言语法简单,结构清晰,易于学习和使用,它的标准库设计也

非常简洁,同时便于开发者上手使用

5、跨平台支持:Go语言可以在多个操作系统 和硬件平台上编译执行,具有很好

的跨平台支持性能

6、丰富的工具链:Go语言提供了一系列的 工具,例如,go fmt,go vet,go test

等。帮助开发者更加方便地进行代码格式化,检查,测试等工作。

7、天然的支持网络编程:Go语言标准库中包含了丰富的网络编程接口,可以轻松

实现web应用程序和分布式系统等。

总之,Go语言是一种简单,高效,安全,易学,并发性强的编程语言,它因其多

个特点而备受青睐,在互联网,大数据,网络编程等领域得到了广泛的应用。简单

来说,Go语言是一种在执行效率和开发效率上都能兼备的语言 。而且go占用内存

没有java占的内存那么多。

相关文章
|
11天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
51 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
41 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
102 71
|
30天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
106 67
|
1月前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
101 62
|
1月前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
6天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
33 12
|
1月前
|
存储 Go
go语言中映射
go语言中映射
38 11
|
1月前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
37 12