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占的内存那么多。

相关文章
|
16天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
38 2
|
15天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
26 2
|
15天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
29 2
|
4天前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
17 2
|
5天前
|
Go 调度 开发者
Go语言中的并发编程:深入理解goroutines和channels####
本文旨在探讨Go语言中并发编程的核心概念——goroutines和channels。通过分析它们的工作原理、使用场景以及最佳实践,帮助开发者更好地理解和运用这两种强大的工具来构建高效、可扩展的应用程序。文章还将涵盖一些常见的陷阱和解决方案,以确保在实际应用中能够避免潜在的问题。 ####
|
5天前
|
测试技术 Go 索引
go语言使用 range 关键字遍历
go语言使用 range 关键字遍历
14 3
|
5天前
|
测试技术 Go 索引
go语言通过 for 循环遍历
go语言通过 for 循环遍历
15 3
|
7天前
|
安全 Go 数据处理
Go语言中的并发编程:掌握goroutine和channel的艺术####
本文深入探讨了Go语言在并发编程领域的核心概念——goroutine与channel。不同于传统的单线程执行模式,Go通过轻量级的goroutine实现了高效的并发处理,而channel作为goroutines之间通信的桥梁,确保了数据传递的安全性与高效性。文章首先简述了goroutine的基本特性及其创建方法,随后详细解析了channel的类型、操作以及它们如何协同工作以构建健壮的并发应用。此外,还介绍了select语句在多路复用中的应用,以及如何利用WaitGroup等待一组goroutine完成。最后,通过一个实际案例展示了如何在Go中设计并实现一个简单的并发程序,旨在帮助读者理解并掌
|
6天前
|
Go 索引
go语言按字符(Rune)遍历
go语言按字符(Rune)遍历
20 3
|
10天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
33 4