从今天开始用博客记录学Go语言的过程,为什么要学Go语言呢?网上已经有很多资料表明Go语言的优势。
所以在这里Go语言的优势便不再一一表明,编程界的高富帅,语法简单,编译速度快,自带gc(垃圾回收),出身名门,等等。
Go语言的安装环境这里不再赘述,直接开始进入程序部分。
package main
import "fmt"
func main(){
fmt.Println("Hello, world")
}
作为码农的仪式感,学一门新语言不写Hello World感觉好像没学,这里当然是先来一波。
那么如何能够使得这段代码跑起来呢?Go语言作为一门编译型语言,Go语言的工具链将源码和其依赖一起打包,生成机器的本地指令,就是静态编译。Go语言提供的工具可以通过go命令下的一系列子命令来调用。最简单的就是run。这个命令会将一个或多个文件名以.go
结尾的源文件,和关联库链接到一起,然后运行最终的可执行文件。
go run helloworld.go
毫无疑问,我们会得到想要的Hello, world。
但是这个命令下,我们就直接运行了程序的结果,那么如何得到编译后的二进制文件呢?我们用以下命令来实现:
go build helloworld.go
Go语言的代码是通过package来组织的,package的概念和libraries或者modules概念比较类似。一个package会包含一个或多个.go结束的源码文件。package main这行声明语句表示该文件是属于哪一个package,紧跟着是一系列import的package名,表示这个文件中引入的package。再之后是本文件本身的代码。
另外比较值得一说的是,Go语言编译过程没有警告信息,所以不遵循规范就会直接报错。
和其他语言一样,Go语言也存在命令行参数,操作方式存在于os这个package里,它提供了操作系统无关的,与系统交互的一些函数和相关变量,运行时程序的命令行参数可以通过os包中一个叫Args的变量来获取。
我们尝试用这个包来实现Linux里echo命令的模拟实现:
package main
import(
"fmt"
"os"
)
func main() {
var s, sep string
for i := 1; i < len(os.Args); i++ {
s += sep + os.Args[i]
sep = " "
}
fmt.Println(s)
}