[ 值得投资的一个小时 ] 1个小时快速学习Go

这里是 <值得投资的一个小时> 系列, 不说废话 , 希望这一个小时能给你带来一些美好的改变
一 背景
1.1 什么是 Go
Go ( == Golang) 是Google研发的** 静态强类型**,编译型 语言
1.2 为什么要学Go
-
大势所趋:
许多大厂(包括我所在的阿里☁️很多项目已经切换到Go)
-
时代变化
- Go的很多特性更适合云原生场景
- Go对于区块链中加密算法很有优势
总之Go是一门非常优秀的语言, 它很适合喜欢简洁,高效代码的你. 推荐你将Go作为你的第二语言
1.3 Go的优点 ( 这部分可以先略过, 后面回过头再看 )
-
语言风格
大道至简,比如及其简单但完备的面向对象设计,面向接口,没有继承只有组合;
最少特性,一个特性对解决问题有显著效果就没有必要存在;
显式表达,比如数据类型必须显式转化,不提供隐式转化能力;
最少惊异,减少那些奇怪的特性设计,最大程度减少错误发生概率; -
语言特性
静态语言、静态编译速度快,拥有静态语言的安全与性能;
天然支持并发,基于CPS并发模型,goroutine轻量级线程,支持大并发处理;
简洁的脚本化语法,如变量赋值 a := 1,兼具静态语言的特性与动态语言的开发效率;
提供垃圾回收机制,不需要开发人员管理,通过循环判活,再启用goroutine来清理内存;
创新的异常处理机制,普通异常通过返回error对象处理,严重异常由panic、recover处理;
函数多返回值,方便接收多值,一些解释性语言已经支持,如python、js的es6等;
支持defer延迟调用,从而提供了一种方式来方便资源清理,降低资源泄露的概率;
面向接口的oop,没有对象与继承,强调组合,以类似于duck-typing的方式编写面向对象;
你很容易就会发现 Go是一帮大佬强迫症犯了 , 解决其他语言中各种缺陷的产物.
二 安装
这里只介绍Mac系统下的安装 ( 其他系统可以查看相关资料 )
2.1 下载安装
~下载地址
点击下载, 然后安装, 就这么简单 (windows系统需要设置环境变量)
安装后查看版本
❯ go version
go version go1.18.4 darwin/amd64
2.2 环境配置
安装成功后,环境变量的配置也很简单 ( 此时此刻 )
仅需要几步操作即可
1、设置GOPATH路径(GOPATH路径是我们的工作区, 默认是 usr/go 不配置也可以)
go env -w GOPATH=我们自己的工作区路径
- 什么都别管,先打开GoMOD,再配置代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
- 重要的环境变量
Go 通过环境变量来做项目上的管理和控制,通过命令 go env 可以查看相关变量:
go env
重要的就两条
GOROOT : Go 的安装目录,即可执行文件所在的目录;
GOPATH :GOPATH 是 Go 语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录(也称为工作区)。~参考文章
因为我们想在全局使用go相关的命令,所以需要简单的配置一下环境变量: (适用于mac, 其他系统请另行百度,大同小异)
- 打开配置文件 vim ~/.zshrc
- 在文件底部加上这三行
export GOROOT=/usr/local/go # 告诉系统GO的安装位置
export GOPATH=/Users/wuriqilang/go # 告诉系统三方包安装的位置
export PATH=$PATH:$GOPATH/bin # 告诉系统,我可以直接使用三方包提供的指令
- 加载配置 source ~/.zshrcx
2.2 开发工具
推荐使用VS Code , 安装Go插件即可
三 第一个行代码
新建go项目目录,并在项目的src目录中创建hello目录
# 创建project的目录
$ mkdir gproject
# 进入目录
$ cd gproject/
# 初始化
go mod init gproject
go: creating new go.mod: module gproject
在该目录中创建一个main.go文件:
package main // import "golang" (此处的注释为go mod init 生成的 module 值)
import "fmt"
func main() {
fmt.Println("xxx")
}
执行或编译后执行:
# 直接run
$ go run main.go
# 编译成二进制文件
$ go build
# 执行二进制文件
四 Go的语法细节(针对初学者)
这部分不建议去看任何其他资料,除了这个网址
https://tour.go-zh.org
看到这里你已经对于Go有了一个初步的了解, 你对于第一章里Go的语言风格和特性似乎有了进一步的了解, 那么你决定去深入学习他了吗?
五 如何你决定要深入学习Go, 下面资料可以参考
只列举我认为必看的文档,持续更新
- go官网:https://go-zh.org/
- 切片的本质: https://blog.go-zh.org/go-slices-usage-and-internals
- Go Web编程:https://www.bilibili.com/video/BV1Xv411k7Xn/?p=1 (视频教程,杨旭)
- 一个很好的Go教程(可以当做查询工具) https://www.topgoer.com/