本文将介绍Go语言的部分基础语法,包括变量和常量、流程控制语句(if-else,for,switch-case)、数组与切片。
变量和常量
Go 语言是一种强类型语言(每个变量都有自己的类型),常见的变量类型包括字符串(内置类型,通过+
拼接;通过=
比较两个字符串)、整数、浮点型、布尔型。运算符的优先级与C语言类似。
变量申明可以使用关键字var name (+变量类型) = value
,不指出变量类型则自动根据value判断。也可以name := value
或者name := 变量类型(value)
例如:var x int =1
常量将var
改为const
,无确定的类型(根据使用的上下文自动确定类型)
例如:const pi = 3.14159
流程控制语句
If-else
与C语言不同之处在于,if
后面的条件判断没有(),但必有{}。
for循环
for
后的三个可选部分无(),可省略全部或部分,必有{}。可与break
和continue
结合使用。
switch-case
与C语言不同的是,case
后不加break
默认不继续后续分支。switch
后的变量无需括号(也可先无变量,在case
中再进行变量值的判断),类型多样(甚至可以是结构体),故可用于取代任何if-else
语句,且更优(结构清晰易懂)。
数组
在Go语言中,数组是一种基本的数据类型,它由固定数量的相同类型元素组成,并且在声明时需要指定数组的长度。Go语言中的数组支持下标访问和修改元素的值,并且支持多维数组的定义和使用。
下面是一个数组的例子:
func main() {
var a [5]int //用var关键字声明数组并指定它的长度
a[4] = 100 //通过下标访问数组的元素第5个元素赋值为100
fmt.Println("get:", a[2])
fmt.Println("len:", len(a)) //使用len()函数获取数组的长度
b := [5]int{1, 2, 3, 4, 5} //定义长度为5的整型数组b,初始化为1、2、3、4、5
fmt.Println(b)
var twoD [2][3]int //多维数组:定义2行3列的整型数组twoD
for i := 0; i < 2; i++ { //使用嵌套的for循环来遍历二维数组
for j := 0; j < 3; j++ {
twoD[i][j] = i + j //下标访问和修改数组元素的值
}
}
fmt.Println("2d: ", twoD)
}
切片
不同于数组,切片是一种可变长度的数组,它可以根据需要时刻更改长度。切片是包含指向底层数组的指针、长度和容量。在创建切片时,可以使用make()函数。切片可以像数组一样写入和读取值。使用append()函数向切片中添加新的元素。(注意:必须将结果复制回原数组。原因如下:当切片的长度超过其容量时,底层数组将会重新分配更大的空间,并将原来的元素复制到新的空间中,返回新空间的值。)
func main() {
s := make([]string, 3) //make()函数创建长度为3的字符串切片s,以下为赋值操作
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f") //用append()函数向切片s中添加了d、e和f
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s)) //在创建切片时就指定长度
copy(c, s) //复制切片的值:copy()函数
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e] 用切片表达式来访问切片的子集
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
}
个人感想:有了C语言的学习基础,在学习GO语言语法的时候只需着重记忆不同点即可。而且GO语言的语法灵活性很强,上手容易。