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

目录
相关文章
|
5天前
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
2天前
|
Go
go语言map、实现set
go语言map、实现set
9 0
|
2天前
|
Go
go语言数组与切片
go语言数组与切片
10 0
|
4天前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
104 5
在go语言服务中封装路由和示例
|
1天前
|
Devops Go 云计算
Go语言发展现状:历史、应用、优势与挑战
Go语言发展现状:历史、应用、优势与挑战
9 2
|
2天前
|
Go
go语言的hello,world
go语言的hello,world
7 1
|
5天前
|
Unix Go 开发者
探索Go语言并发模型:原理与实践
本文深入探讨了Go语言的并发模型,包括其设计原理、Goroutine和Channel的基本使用,以及如何在实际项目中高效地应用这些概念来提高程序的性能和可维护性。
|
6天前
|
Go
Go 语言是如何实现切片扩容
Go 语言是如何实现切片扩容
|
7天前
|
存储 Go
Go 语言当中 CHANNEL 缓冲
Go 语言当中 CHANNEL 缓冲
|
8天前
|
中间件 Go
go语言后端开发学习(三)——基于validator包实现接口校验
go语言后端开发学习(三)——基于validator包实现接口校验