哈哈哈哈,大家好,我来给大家安利 Go 语言了。
简单过场:
我大概是2013年7月开始接触Go语言的,被同学安利(感谢 @slowfei),尝试了解之后然后就被这不按常理出牌的语法、逻辑、关键字和诡异的格式化时间格式深深的吸引而无法自拔。
- 最早接触版本 golang 1.1.8
- 仅有25个关键字(果断的抛弃了Java .Net C#,你们为什么那么胖?)
- 简式声明符 “ := ” 声明并赋值,并且系统自动推断类型,不需要 var 关键字
- 协程 go func(){}()
- 多返回值
- 格式化时间 t.Format("2006-01-02 15:04:05.999999999 -0700 MST")
不接受反驳,当时道行尚浅,且所知编程语言有限,哈哈哈哈
Golang 简介
Go 语言是由 Google 出品的的一门通用型计算机编程语言。种种亮点以及快速崛起的编程语言吸引着广大编程爱好者,近年来受到热捧 Go 已经成功跻身主流编程语言的行列。许多大厂也都已经拥抱 Go 语言,包括阿里巴巴、小米、滴滴、今日头条、奇虎360、京东、Bilibili、知乎、美图、猎豹移动等。
Go 程序可以装在有 Windows、Linux、FreeBSD等操作系统的服务器上运行,并用于提供基础软件支撑、API 服务、WEB 服务、网页服务等。Go 语言也在移动端上进行了积极的探索,现在在 Android 和 iOS 上都可以运行其程序。另外,Go 语言也已经和 WebAssembly 联合,加入了 WASM 平台。这意味着过不了多久,互联网浏览器也可以运行 Go 编写的程序了。
从业务维度看,在云计算、微服务、大数据、区块链、物联网等领域,Go 语言早已蓬勃发展。有的使用率已经非常之高,有的已有一席之地。即使是在 Python 为王的数据科学和人工智能领域,Go 语言也在缓慢渗透,并初露头角。 (参考引用 1.)
我只是早期的学习者和使用者,也与广大的爱好者见证了这几年 Go 语言的发展和崛起。
- Go 1.5 自举( 用 Go 语言编写程序来实现 Go语言自身)
- Go 1.7 急速GC (tricolor mark-and-sweep algorithm 三色标记清除算法)(参考引用 2.)
- Go 1.10 自带工具全面升级 (参考引用 3.)
- Go 1.11 Modules (前段时间吵得沸沸扬扬,简单看了下感觉像是 Nodejs 的管理模式,未尝试)
Go 官网:golang.org (需要科学上网)
推荐:studygolang.com
直接上代码
上面介绍了这么多,那我们就别逼逼了,直接上代码!
好了,基础入门就到这里结束了,谢谢观看!
别别别,开个玩笑。
安装支持环境
首先,第一件事就是根据自己电脑的计算架构以及操作系统安装相对的语言支持包。
Goalng 语言支持包下载:
下载完成后,不要着急安装,先来了解一下 go 需要的 3 个重要的环境变量(引入 gomod 能力后,可以没那么重要)
基础环境变量(以Windows为例)
GOROOT :Go 语言源码存放路径
GOPATH :Go 语言的工作区,也就是你自己的代码存放路径
GOBIN :一般默认不做设置
那么我们就来重点说说 GOPATH
GOPATH:指向一个目录路径,也就是你的代码所在的工作区路径。
它包含了3个主要文件目录(命名均为小写):
- bin:构建后,可执行文件目录 (Executable File)
- pkg:归档文件目录 (Archive File)
- src:源码文件目录(Source File)
目录结构如下:
了解了这点以后,那就可以尝试安装一下 go 了。
go 提供下载包中有 zip 和 msi 格式是适合 Windows 系统环境的。
- 如果是 msi 安装包,双击运行,其文件夹默认路径为 c:/go ,安装完成后,检查是否存在
GOROOT
、GOPATH
、GOBIN
这 3 个系统环境变量。 - 如果是使用了 zip 那么就可以选择解压到自己喜欢的路径中。然后手动配置
GOROOT
、GOPATH
、GOBIN
这 3 个系统环境变量。
然后还要记得在系统 path 中添加 %GOROOT\bin% 这样你才可以在命令行中使用 go 命令。
以上都设置完成后,让我们打开命令行输入 go version
回车!(如果不出意外的话)
就可以看到当前所使用的 go 语言版本、操作系统以及计算架构了。
让我们来 Hello World! 吧!
以上一切正常的话,那么我们就来实现一个 Hello World!
src 下新建 hellogo 文件夹,进入 hellogo 文件夹,新建 main.go 文件,最终文件结构如下:
双击 main.go 文件,用记事本打开,将以下代码复制进去保存
package main
import "fmt"
func main() {
fmt.Println("Hello Golang!")
}
复制代码
打开命令行,cd 进入该文件所在目录,命令行中输入:go run main.go
那么你就会得到如下结果了,就是这么简单!
为什么说 GOPATH 是最重要的?
既然这么简单,那为什么说 GOPATH 是最重要的?
GOPATH 是 Go 语言项目在其生命周期内的所有操作基本上都是围绕着 GOPATH 和 工作区 进行的,如 编码、依赖管理、构建、测试、安装等等。
GOPATH 可以是一个目录路径,也可以包含多个目录路径,每个目录都代表着 Go 的一个工作区(work space),其中源码是以代码包为基本组织单位,目录可以有子目录,所以代码包可以有子代码包,一个代码包可以包含任意个以 .go 为扩展名的源码文件,这些文件都需要被声明为属于同一个代码包,代码包的名称一般会与这些源码文件所在的目录同名。如果不同名那么在构建、安装的过程中就会以代码包名称为准。(参考引用 4.)
说白话就是,GOPATH 指向的目录下,可以是一个或者多个项目,每一个都是一个工作区,每一个工作区也都可以是一个包,go 源码文件是以 .go 结尾的文件。
一些历史
Go 1.10 新增变量
GOCACHE & GOTMPDIR
- GOCACHE go cache机制,go build tool将维护一个package编译结果的缓存以及一些元数据,缓存默认位于操作系统指定的用户缓存目录中,其中数据用于后续构建重用
- GOTMPDIR 用于设置 Go tool 创建和使用的临时文件的路径,以防止某些系统对
/tmp
文件是只读状态如果在编译、安装、运行的过程中出现(非环境)没有具体提示但完成后没有正确产生文件的,可以尝试修改此变量路径。
Go 包管理工具
go v1.5 之前是 go 的包管理是 monorepo 模式的,即所有的包都放在 GOPATH 指定的路径下。
go v1.5 时引入 vendor 的包管理模式且社区还维护了一套 dep 包管理工具。
go v1.11 中加入了 Go Module 作为官方包管理形式,但无法直接使用。
go v1.13 时 Go Module 逐渐打磨到成熟,且默认开启,这时就可以很方便的使用 go mod 来管理 Module 了。
现在
go v1.15 的更新中语言规范的变化基本很小。主要改进包括工具,编译器的性能以及标准库。
更多的具体信息可查看:blog.golang.org/go1.15-prop… (科学上网)
国内翻译:learnku.com/docs/go-blo…
最后,为什么说时间格式诡异?
Go time format 源码部分
传说:这是 Golang 种子思想诞生的时刻
最后的最后
Golang 吉祥物感谢您的观看
参考资料
- Go 语言核心 36 讲 | 预习篇——极客时间 作者:郝林
- Go 语言的实时GC——理论与实践:segmentfault.com/a/119000001…
2.1:5张图看尽Go语言GC的演变史:blog.csdn.net/erlib/artic…
2.2:Golang Github 《建议:消除STW堆栈重新扫描》:github.com/golang/prop…- 《Go 1.10中值得关注的几个变化》:ju.outofmemory.cn/entry/34457…
版权声明:
本文版权属于作者 林小帅,未经授权不得转载及二次修改。
转载或合作请在下方留言及联系方式。