初识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语言,以后会慢慢进行更深入内容的更新,大家如果有什么不同的意见或者是想法可以随时在评论区艾特我

目录
相关文章
|
3天前
|
安全 网络协议 Go
Go语言网络编程
【10月更文挑战第28天】Go语言网络编程
89 65
|
3天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
23 13
|
4天前
|
Go 开发者
GO语言基础
【10月更文挑战第27天】GO语言基础
21 10
|
3天前
|
网络协议 安全 Go
Go语言的网络编程基础
【10月更文挑战第28天】Go语言的网络编程基础
17 8
|
2天前
|
Go
go语言的复数常量
【10月更文挑战第21天】
13 6
|
4天前
|
缓存 网络协议 Unix
Go语言网络编程技巧
【10月更文挑战第27天】Go语言网络编程技巧
22 8
|
4天前
|
网络协议 Go
Go语言网络编程的实例
【10月更文挑战第27天】Go语言网络编程的实例
11 7
|
2天前
|
Go
go语言的浮点型常量
【10月更文挑战第21天】
9 4
|
2天前
|
编译器 Go
go语言的整型常量
【10月更文挑战第21天】
7 3
|
3天前
|
Go
go语言编译时常量表达式
【10月更文挑战第20天】
11 3