这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
今天是青训营的第一天课程,学习到了 Go 语言的基础语法,我做了点笔记
包括了 Go 的安装和一些我今天学下来的感悟
Go,全称 Golang,是由 Google 的程序员设计,是一种静态强类型、编译型、并发型,并具有垃圾回收的功能的高级语言
同时也是一门奇怪的语言,有奇怪的规定,比如说
- 不能加分号
- 左大括号不能换行
if和for的条件不能加小括号}和else必须同行注意,是不能,不是不用,如果没注意的话会被报错的
前面两条我都能接收,但是后面两条我是强烈不适!
大概是设计 Go 语言的程序员想通过 Go 语言风靡全球来让远古时代就开始的圣战结束吧
同时还内置 gofmt 工具,能自动整理代码多余的空白、变量名称对其、把对其空格转换成 Tab
安装 Go
我只讲在 manjaro 中配置 Go,只需要一行代码
$ sudo pacman -S go
安装完之后,我们还需要做两件事
- 创建 go 的工作目录
- 设置环境变量
随意选择一个地方创建,我倾向与在 ~/workspace/go/ 这个文件夹,再在里面创建 ~/workspace/go/gobin/ 用于存放二进制文件,~/workspace/go/src/ 用于存放源码和新建项目
然后来配置环境变量,也就是 $PATH 在你的终端初始文件里设置下面几行
其中第二行需要你查看 whereis go 的返回值来确定
export GO111MODULE=on export GOROOT=/usr/lib/go
export GOPATH=~/workspace/go
export GOBIN=~/workspace/go/gobin
export GOPROXY=https://goproxy.cn
export PATH=$PATH:$GOROOT/bin:$GOBIN
然后在 vim 下 :CocInstall coc-go 等待安装完你就拥有 Go 的 lsp 补全支持了(好耶
顺道提一嘴,coc-go 用的服务端是官方的 gopls,不用的时候记得 kill
Go 的语法
像开头说的,Go 的语法相当的奇怪,反主流
一段 Go 的入门程序会像下面这样
package main
import (
"fmt"
)
func main() {
fmt.Print("hello, world")
}
其实我也不是很想在这里啰嗦 Go 的基础语法,就是传统高级语言那套再加上点设计师的恶趣味,你可以通过这个网站来认识 Go 的语法
再提几嘴我注意到的
Go 的函数申明和调用没有强制先后顺序,下面这段程序是可以正常运行的,如果你有一定的 C 语言基础就一定会以为下面这段程序会报错吧,但它能顺利的通过编译并且运行!
package main
import (
"fmt"
)
func main() {
fmt.Print(a())
}
func a()int {
return 6
}
math/rand 随机数需要自己手动添加种子,否则随机出来的都是同一个数字
package main
import (
"fmt"
"math/rand" "time"
)
func main() {
rand.Seed(time.Now().Unix())
fmt.Print(rand.Intn(233))
}
另外 Go 的指针的用处很局限,只能传实参和节省内存开销这几种用处罢了