前言
相比于几十年前就已成形的C/C++,和创造于世纪之交的Java,Go的出现相对较晚。它是在2007年末才开始被开发,至2009年11月开源,直到2012年才发布第一版。但如今,凭借着它简洁的语法、高效的开发效率和优越的并行性能,Go已经成为了各大公司后端开发的优先选择。在这样的趋势下,学习Go的技术栈,对于在后端方向的发展非常重要。本文将讲述Go的基础语法,以及一些常用的特性。
1. Go的安装
在Go的官网上,即可下载Go的安装包:go.dev/dl/ 。Go在多种主流操作系统上,包括Windows、MacOS、Linux等均有支持,在下载页面选择适配自己系统的安装包进行下载,并按照向导进行安装。
在Linux上安装的操作需要注意:
下载好Go的二进制包之后,将其解压到/usr/local目录
tar /usr/local -zxf go1.4.linux-amd64.tar.gz
之后需要添加Go的可执行目录到环境变量,直接在终端执行以下命令(暂时),或者将以下添加至.bashrc
文件中(永久,添加后执行source ~/.bashrc
以生效)
export PATH=$PATH:/usr/local/go/bin
2.Hello World!
新建一个目录,在其中新建源代码文件helloworld.go
,内容如下:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
执行命令go run helloworld.go
,就可以看到程序被执行,并输出:
Hello World!
第一个Go程序就大功告成了。
其中,package main
声明文件所在的包名,表明该程序可以独立执行,每一个Go项目都要有名为main
的包。若文件在其中一个子目录,则作为独立的包,包名为目录名(类似于Java)。
与Java、Python一样,外部依赖的引入通过import
关键字声明。例如import "fmt"
就是引用了fmt包,该包提供了Go的格式化输入输出。
func main()
即为程序的主函数,在程序执行过程中最先执行,若有init()
函数则先执行init。
fmt.Println()
将参数的内容输出到控制台,并换行。
3. 数据类型
- 布尔型(bool):true或者false。
- 数字型:Go语言支持整数(int)、浮点数(float)和复数(complex)。按照位的大小细分为很多类型,位数作为后缀区分。整数支持8、16、32、64位,浮点数和复数支持32位和64位。此外,整数还支持无符号(uint)。
- 字符串:顾名思义,和其他语言的字符串一样,不多赘述。
- 其他派生类型:数组、指针、结构体、channel、函数等。
4. 变量声明
Go语言使用var
关键字声明变量,可以一次声明多个变量:
var a int32
var b, c, d string
也可以直接对变量赋值,自行判断数据类型:
var a = 3
可以用赋值操作符简化:
a := 3
这样的变量声明方式,就为Go带来了如同Python一样的简洁语法。
5. 运算符、条件分支、循环
运算符与C基本相同。
而逻辑控制上,大部分语法也与C相同,但是有一点重要的不同:Go的条件表达式不加括号。
if ( a > 1 && b == 2) {
return 0;
}
for(int i = 0; i < 6; i++){
printf("%d\n", i);
}
if a > 1 && b == 2 {
return
}
for i := 0; i < 6; i++ {
fmt.Println(i)
}
Go只有for循环,但也可以后面跟单个表达式,实现C中的while循环。
6. 数组
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var arrayName [size]dataType
其中,arrayName 是数组的名称,size 是数组的大小,dataType 是数组中元素的数据类型。
以下定义了数组 balance 长度为 10 类型为 float32:
var balance [10]float32
另外,还可以使用 := 简短声明语法来声明和初始化数组:
numbers := [5]int{1, 2, 3, 4, 5}
访问数组中的元素,则与其他语言相似,通过下标索引来访问。
7. 结构体
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:
type struct_variable_type struct {
member definition
member definition
...
member definition
}
此外,Go支持和C一样的指针操作,通过*定义指针及获取指针指向的内容,&为取地址符。
在后续文章中,将讲述Go的一些与其他语言不同的,一些进阶的常用特性。