Go语言的产生背景
Go语言是一种由Google开发的开源编程语言,它于2009年首次发布。与C/C++,Python等老牌编程语言相比,Go语言是一门年轻的语言。随着互联网走入寻常百姓家,与日俱增的用户数对互联网服务的并发性能提出了高要求。Go语言的设计目标是在保持简洁性和易用性的同时提供高性能和并发性能,与后端的需求比较符合。
Go语言安装
进入Go语言官网,go.dev/,注意需要科学上网。
点击屏幕中间的Download按钮,进入All Release界面。
选择对应的操作系统即可。
Vscode中Go开发环境的配置
打开vscode,安装Go扩展。
Vscode会提示,下载一些IDE运行需要的包,此处按照指示下载即可。
安装后新建一个文件go.mod,并输入”module main”,换行,再输入”go 1.20”。
该文件指定了用于管理项目的依赖关系和版本信息,这里仅仅指定当前module名和go版本。
Hello World
新建文件main.go,输入如下内容
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
第一部分是定义当前包名,main。
第二部分是导入需要使用的包名,fmt。
第三部分定义了程序入口main函数,包含一个打印字符串”hello world!”的语句。Println函数表示在终端打印参数,并在完成后换行,支持同时传入多个参数,会一起打印。
定义变量
Go语言定义变量有两种方法。
第一种是使用var关键字指定类型,注意,类型放在变量名后面。例如
var a int = 20
第二种是通过:=算符,根据值来推导类型。例如
f := float32(2.5)
定义常量
Go语言定义常量使用关键字const。例如
const h = 50
循环
Go语言简化了循环,只有for循环一种循环,且去掉了循环条件处的(),便于书写,但和C++不同的是,即使循环体仅有一行语句,也需要加{}。例如
for j := 7; j < 9; j++ {
fmt.Println(j)
}
分支
Go语言的分支和C++相似,有if和switch两种。
If语句和C++相比去掉了分支条件处的(),即使循环体仅有一行语句,也需要加{}。else关键字没有变化。例如
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
Switch语句和C++相比修改较大,C++的switch必须在每个分支结尾处写上break,否则会走到下一个case分支去,但Go不用加break,走到下一个case时直接退出整个Switch语句。例如
switch a {
case 1:
fmt.Println("one")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
数组
Go定义数组与定义变量相似,也有var关键字和:=算符两种方法。注意Go语言的类型在数组长度之后。例如
var a [5]int
b := [5]int{1,2,3,4,5}
var c[2][3]int
Go只能初始化一维数组,如果定义多维数组,必须用for循环初始化。但Println可以直接打印多维数组,不用for循环打印。
切片
Go中的可变长随机访问数组称为切片,对标的是C++中的std::vector。切片使用make函数创建,可以通过append在切片末尾插入元素,可以用len获得切片长度,并通过[:]指定下标获得切片的一个部分。例如
s := make([]int, 3)
s[0] = 1
s = append(s, 4)
fmt.Println(s, len(s)) // [1 0 0 4] 4
fmt.Println(s[1:3]) // [0 0]
map
Go中的map是基于哈希实现的键值对容器,相当于C++的unordered_map。map使用make函数创建,可支持[]读取键对应元素或者插入键对应元素。若读取不到元素,则返回默认值和ok。使用delete函数删除元素。
m := make(map[string]int) // hash
m["one"] = 1
m["two"] = 2
fmt.Println(m) //map[one:1 two:2]
delete(m, "one")
fmt.Println(m) //map[two:2]
r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false