Golang学习笔记1(入门篇)| 青训营

145 阅读4分钟

写在前面

笔者对于Golang可以说是真正的零基础,不过好在之前学过C++,有些东西倒也是共通的,这篇以及之后的笔记就当作自己的一个记录,也可以算是和大家的一些分享 : )

在这篇以及之后的文章中,我希望能够把所要讲的知识写得详细一些,这也并不是说把每个知识点都列出来;此外,在前期基础语法方面我也会写一些关于C++与Golang的区别,内容或许不会很精良,就权当是锻炼自己写文章的能力吧

下面是一些可能会用到的工具:不要点击来路不明的链接

文章已更新至个人博客

Golang的优点

  • 清晰并且简洁
    Go 努力保持小并且优美,你可以在短短几行代码里做许多事情
  • 并行
    Go 让函数很容易成为非常轻量的线程。这些线程在 Go 中被叫做 goroutines
  • 快速
    编译很快,执行也很快。目标是跟 C 一样快。编译时间用秒计算
  • 安全
    当转换一个类型到另一个类型的时候需要显式的转换并遵循严格的规则。Go 有 垃圾收集,在 Go 中无须 free(),语言会处理这一切
  • UTF-8
    任何地方都是 UTF-8 的,包括字符串以及程序代码
  • 开心
    用 Go 写程序会非常开心!(来源于《Learning Go》)

先从Hello World说起

package main

import (
	"fmt"
)

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

输出结果将会是: hello,world

在VS code中的编译运行结果也是:

image.png

Go build与Go run

但是,我们希望将这一段程序编译,以备将来使用,这时候我们就需要使用go build指令来生成一个可执行的二进制文件(Windows下表现为一个.exe后缀文件),之后便可以在Windows命令行输入该文件名称来直接运行,换而言之,它可以随时运行而不需要担心系统库的更新。

下面是对go build指令的演示:

只需要直接运行编译好的.exe文件就可以得到我们想要的结果了

还有一种方法,我们在命令行中直接对main.go执行go run操作,该命令可以直接 对main.go进行编译运行:

image.png

可以看到同样输出了我们想要的结果

程序解析

Go 语言的代码通过(package)组织,包类似于其它语言里的库(libraries)或者模块(modules)。一个包由位于单个目录下的一个或多个 .go 源代码文件组成,目录定义包的作用。每个源文件都以一条 package 声明语句开始,这个例子里就是 package main,表示该文件属于哪个包,紧跟着一系列导入(import)的包,之后是存储在这个文件里的程序语句。

Go 的标准库提供了 100 多个包,以支持常见功能,如输入、输出、排序以及文本处理。比如 fmt 包,就含有格式化输出、接收输入的函数。Println 是其中一个基础函数,可以打印以空格间隔的一个或多个值,并在最后添加一个换行符,从而输出一整行。

跟随在 package 声明后面的 import 声明,其作用是告诉编译器源文件需要哪些包。这里举例的hello world 例子只用到了一个包,大多数程序需要导入多个包。

在程序中必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。这项严格要求避免了程序开发过程中引入未使用的包(Go 语言编译过程没有警告信息)。

Go 语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句。实际上,编译器会主动把特定符号后的换行符转换为分号,因此换行符添加的位置会影响 Go 代码的正确解析。举个例子,函数的左括号 { 必须和 func 函数声明在同一行上,且位于末尾,不能独占一行。

例如,下面的程序就无法通过编译:

package main

import 
(
	"fmt"
)

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

原因是左括号单独成行

总结

和C++相比,Go相对来说更加简洁,在形式上与C++也有很多相似的地方,需要注意的是编译运行(go run/go build)、package的严格要求以及行末换行的问题

下一篇预告:Golang程序结构