从0到1 | 青训营笔记

85 阅读3分钟

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

安装与环境配置

在这里笔者使用jetbrains的Goland进行安装。在安装过程中需要注意的是相关环境的配置(Gopath和Goroot),笔者参照了该连接:blog.itpub.net/69981976/vi…

从helloworld开始

package main

import ("fmt")

func main() {
   fmt.Println("hello world")
}

首先我们要了解一个概念,Go程序是通过package来组织的。

第1行

package <pkgName>(在我们的例子中是package main)这一行告诉我们当前文件属于哪个包, 而包名main则告诉我们它是一个可独立运行的包,它在编译后会产生可执行文件。 除了main包之外,其它的包最后都会生成*.a文件(也就是包文件)并放置在$GOPATH/pkg/$GOOS_$GOARCH中 (以Mac为例就是$GOPATH/pkg/darwin_amd64)。

每一个可独立运行的Go程序,(源文件)必定包含一个package main, 在这个main包中必定包含一个入口函数main,而这个函数既没有参数,也没有返回值。

一个包含main函数的main包Go源文件,即package main且有入口函数main的,可以使用go run这个命令执行。
前面学习时,可以只使用go run这个命令,而不用管go buildgo install等命令。

第3行

为了打印Hello, world...,我们调用了一个函数Printf,这个函数来自于fmt包, 所以我们在第三行中导入了系统级别的fmt包:import "fmt"

包的概念和Python中的package类似,它们都有一些特别的好处: 模块化(能够把你的程序分成多个模块)和可重用性(每个模块都能被其它应用程序反复使用)。 我们在这里只是先了解一下包的概念,后面我们将会编写自己的包。

第5行

我们通过关键字func定义了一个main函数,函数体被放在{}(大括号)中,就像我们平时写C、C++或Java时一样。
大家可以看到main函数是没有任何的参数的,我们接下来会学习如何编写带参数的、返回0个或多个值的函数。

第6行

我们调用了fmt包里面定义的函数Printf。 大家可以看到,这个函数是通过<pkgName>.<funcName>的方式调用的,这一点和Python十分相似。

前面提到过,包名和包所在的文件夹名可以是不同的, 此处的<pkgName>即为通过package <pkgName>声明的包名,而非文件夹名。

最后大家可以看到我们输出的内容里面包含了很多非ASCII码字符。 实际上,Go是天生支持UTF-8的,任何字符都可以直接输出,你甚至可以用UTF-8中的任何字符作为标识符。

结论

Go使用package(和Python的模块类似)来组织代码。 main.main()函数(这个函数主要位于主包)是每一个独立的可运行程序的入口点。 Go使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go的发明者之一),所以它天生就具有多语言的支持。

进一步拓展与思考

在课程的后续学习中,我们通过一些小案例迅速了解了基础语法,以及一些实战案例,在这里不过多赘述。其实在新语言的学习过程中,我们只需要了解到该语言的特色和用法,前者我们已然用helloworld初窥门槛,后者的话实则我们边学Go边看Go的文档即可。

未解决问题记录

第三个实战样例有待明天二刷并提炼。

尾记

在这篇笔记里我主要在说helloworld,实则上是以小见大的举措。去逐个分析已然讲过的实战案例显得十分无趣与冗余。在后续的笔记中仍保持这种风格为好,宜精不宜多。