Golang是最年轻的编程语言之一,在写这篇内容之前,目前稳定的Golang版本是1.19.5。
除此之外,它被认为是一种在开发者中很受欢迎的编程语言。它可以在许多平台和环境中构建和运行,有丰富且实用的内置包。
我使用Golang是因为它简洁明了,结构化,而且干净。
接下来,我会介绍为何选择Golang。我不打算将Golang与其他编程语言进行比较,因为我认为并没有什么意义和价值。
所以,我会从语言结构本身开始介绍,让你领会Golang的与众不同。
语言结构
package main
import (
"errors"
"fmt"
)
type Numbers []int
func (n Numbers) Repeat() error {
if n == nil {
return errors.New("Numbers is nil")
}
for i, e := range n {
fmt.Printf("%02d => %3d\n", i+1, e)
}
return nil
}
func main() {
if err := Numbers(nil).Repeat(); err != nil {
fmt.Println(err)
}
_ = Numbers([]int{1, 99, 100}).Repeat()
}
我不会介绍所有的Go语言语法,但上面的代码是Golang代码的一个例子。
你现在不需要理解它,但你可以学习代码的结构,从package和import,到func main作为入口点,if-else和for循环作为控制结构之一,还涉及到types、nil、errors等等。
它是严格的类型化的,使用大括号作为范围,即使你只写了一行控制结构,使用nil而不是null(在这里节省了1个字符),并且只用分号来分隔语句,而不是结束它。
综上所述,Golang的语法很适合初学者,至少我是这么认为的。
你不用担心写出质量较差的代码语法,因为Golang不仅有完善的指南来教你如何写的更好,它也有自己的linter和formatter,来规范化你的代码。
内置支持
Golang带来了自己内置的工具来帮你构建一个优秀的应用程序。
Linter? Formatter? Tester? 你说了算。
它也有一个垃圾收集器,原生支持并发,还支持在线运行。除此之外,Golang也有支持性的内置包。你可以在没有任何第三方模块的情况下编写一个网络应用、命令行界面应用,甚至是一个Web Assembly应用。
但是,如果你想创建一个Golang模块呢?让我们来谈谈这个问题。
模块
你可以在本地和远程轻松地创建一个 Golang 模块。
只需执行go mod init ,然后像往常一样编码即可。
Golang模块开箱即支持git,你可以直接把你的Golang模块推送到git仓库,然后把它导入你的代码中。
例如,如果你想导入Postgres插件或数据库凭证模块,你只需输入git repo的名字就可以导入。
import (
"context"
"database/sql"
"log"
"time"
"github.com/ClavinJune/rotator"
"github.com/lib/pq"
)
构建结果
Golang将你的代码构建成二进制文件。
如果你在Windows上,它将把你的代码构建成可执行文件,如果你在Linux上,它将构建一个ELF文件,以此类推。
另外,你可以只用一个环境变量来控制构建。
假设你在一台Linux机器上,但你想为Windows创建一个可执行文件,只要告诉它就可以了。
$ ls
main.go
$ GOOS=windows GOARCH=amd64 go build main.go
$ file main.exe
main.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
$ GOOS=darwin GOARCH=amd64 go build main.go
$ file main
main: Mach-O 64-bit x86_64 executable
你也可以创建一个Web Assembly模块。
$ GOOS=js GOARCH=wasm go build -o main.wasm main.go
$ file main.wasm
main.wasm: WebAssembly (wasm) binary module version 0x1 (MVP)
在前面的内容里,我并没有面面俱到详细介绍Go语言的每一处细节,只是主观的介绍了一些我个人比较欣赏的亮点。
如果,这能够引起你对Go语言的兴趣,可以通过书籍或者教程去深入、系统的学习。