初识Go语言

简介: 初识Go语言

go语言官方下载安装


官网:golang.org(需翻墙)

国内下载:Go下载 - Go语言中文网 - Golang中文社区

根据自己的系统(mac/Linux/Windows)自行下载即可


Go 语言介绍



Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。


Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。


Go 语言特色


简洁、快速、安全

并行、有趣、开源

内存管理、数组安全、编译迅速


Go 语言用途


Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。


对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。


第一个go语言程序


package main
import "fmt"
func main() {
    fmt.Println("Hello, World!")
}

要执行 Go 语言代码可以使用 go run 命令。


Go 语言的基础组成有以下几个部分:


包声明

引入包

函数

变量

语句 & 表达式

注释

这些和其他的语言的组成部分是一样的 ,所以有其他语言基础的小伙伴们可能会更好学一点哦!


Go语言的特性


语法简单

Go语言的极简


极简:代码一经写出,就能知道跑出来是什么效果,有什么东西,内存又是如何进行分配的,


Go 从零开始,没有历史包袱,在汲取众多经验教训后,可从头规划一个规则严谨,Go语言的语法规则严谨使得,大部分人进行写出的代码都是一样的,作为一个极简的语言,它放弃了“灵活性“换来了”极简性”。


并发模型

如今,并发程序,是每个程序员必不可少的基本技能,但是Go反其道而行之,


将一切都并发化,运行时用 Goroutine 运行所有的一切,包括 main.main 入口函数。


Goroutine 是 Go 最显著的特征,它用类协程的方式来处理并发单元,但是在运行时层面做了更深度的优化处理。这使得语法上的并发编程变得极为容易,无须处理回调,无须关注线程切换,一个字——“简”。


内存分配

内存分配器完整保留了 tcmalloc 的原始架构。使用 cache 为当前执行线程提供无锁分配,多个 central 在不同线程间平衡内存单元复用。在更高的层次里,heap 则管理着大块内存,用以切分成不同等级的复用内存块。快速分配和二级内存平衡机制,让内存分配器能优秀地完成高压力下的内存管理任务,这也是Go的一个内存特点,在近期,编译器优化卓有成效。它将对象分配在栈上,用来降低垃圾回收压力,减少管理消耗,提升执行性能,这样大大提高了部分性能。


垃圾回收(标记清算法)

标记清扫算法是一个很基础的垃圾回收算法,该算法中有一个标记初始的 root 区域,以及一个受控堆区。root 区域主要是程序运行到当前时刻的栈和全局数据区域。在受控堆区中,很多数据是程序以后不需要用到的,这类数据就可以被当作垃圾回收了。


判断一个对象是否为垃圾,就是看从 root 区域的对象是否有直接或间接的引用到这个对象。如果没有任何对象引用到它,则说明它没有被使用,因此可以安全地当作垃圾回收掉。


标记清扫算法分为两阶段,分别是标记阶段和清扫阶段。


标记阶段,从 root 区域出发,扫描所有 root 区域的对象直接或间接引用到的对象,将这些对上全部加上标记;

清扫阶段,扫描整个堆区,对所有无标记的对象进行回收。


静态链接

静态链接被当作优点宣传,只须编译后的一个可执行文件,无须附加任何东西就能部署,静态编译的好处显而易见。将运行时、依赖库直接打包到可执行文件内部,简化了部署和发布操作,无须事先安装运行环境和下载诸多第三方库。这种简单方式对于编写系统软件有着极大好处,但是由于编译器都在完善动态库 buildmode 功能,所在未完成的buildmode时期,其实还是优点小尴尬的。


标准库

功能完善、质量可靠的标准库为编程语言提供了充足动力,Go 标准库虽称不得完全覆盖,但也算极为丰富。其中值得称道的是 net/http,仅须简单几条语句就能实现一个高性能 Web Server,优秀第三方资源也是语言生态圈的重要组成部分。近年来崛起的几门语言中,Go 算是独树一帜。


工具链

完整的工具链对于日常开发极为重要,编译、格式化、错误检查、帮助文档,还是第三方包下载、更新都有对应的工具。其功能未必完善,但起码算得上简单易用,不会有太多的复杂使用方法。内置完整测试框架,其中包括单元测试、性能测试、代码覆盖率、数据竞争,以及用来调优的 pprof,这些都是保障代码能正确而稳定运行的必备利器。内置完整测试框架,其中包括单元测试、性能测试、代码覆盖率、数据竞争,以及用来调优的 pprof,这些都是保障代码能正确而稳定运行的必备利器。




总结


这篇文章,主要是讲了,go语言的一些特点和特色,简单介绍了一下go语言,以后会慢慢进行更深入内容的更新,大家如果有什么不同的意见或者是想法可以随时在评论区艾特我

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