Go语言基础 | 青训营笔记

488 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

今天是青训营的第一天课程,学习到了 Go 语言的基础语法,我做了点笔记

包括了 Go 的安装和一些我今天学下来的感悟

Go,全称 Golang,是由 Google 的程序员设计,是一种静态强类型、编译型、并发型,并具有垃圾回收的功能的高级语言

同时也是一门奇怪的语言,有奇怪的规定,比如说

  1. 不能加分号
  2. 左大括号不能换行
  3. iffor 的条件不能加小括号
  4. }else 必须同行

注意,是不能,不是不用,如果没注意的话会被报错的

前面两条我都能接收,但是后面两条我是强烈不适!

大概是设计 Go 语言的程序员想通过 Go 语言风靡全球来让远古时代就开始的圣战结束吧

同时还内置 gofmt 工具,能自动整理代码多余的空白、变量名称对其、把对其空格转换成 Tab

安装 Go

我只讲在 manjaro 中配置 Go,只需要一行代码

$ sudo pacman -S go

安装完之后,我们还需要做两件事

  1. 创建 go 的工作目录
  2. 设置环境变量

随意选择一个地方创建,我倾向与在 ~/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 的指针的用处很局限,只能传实参和节省内存开销这几种用处罢了