目的
这篇文章主要的目的是将这两天学到的、视频中没讲的go语言基础语法和常用特性做一些补充。
补充内容
变量
- string类型发变量是不可以修改的,string类型的值是只读的二进制byte slice。
- 若需要修改,则需要将string转为[]byte后修改,再转回string。
func main() {
x := "text"
//x[0] = "T" // error: cannot assign to x[0]
xBytes := []byte(x)
xBytes[0] = 'T'
x = string(xBytes)
fmt.Println(x)
}
控制流
- go不支持三元运算符,可以用if else实现三元运算符的效果。
- go中执行完swtich语句中的case会直接退出switch,若你想使逻辑进入下一个紧邻的case,可以使用fallthrough关键字。
func main() {
switch num := 115; {
case num < 50:
fmt.Printf("%d is less than 50\n", num)
fallthrough
case num > 100:
fmt.Printf("%d is greater than 100\n", num)
fallthrough
case num < 200:
fmt.Printf("%d is less than 200", num)
}
}
数组
和C/C++中将数组作为参数给函数时是将数组首地址指针传给函数不同,go中数组作为参数传进函数时,传递的是值拷贝,所以无法更新数组,若想改变数组需传递数组指针。
切片
- 切片是由指向基础数组中第一个可访问元素的指针、切片的长度、切片的容量三个部分组成的
- 切片作为函数参数时会改变切片中的值因为切片的底层实现是用指针。
- go提供了内置函数
append(slice, element)便于你向切片添加函数,这个函数会返回一个新的切片 - go没有内置的函数用于从切片中删除元素,若想从切片中删除元素可以使用切片运算符
s[i:p]来新建一个不包含需要删除元素的切片。
func main() {
letters := []string{"0", "1", "2", "3", "4"}
remove := 2
if remove < len(letters) {
fmt.Println("Before", letters, "Remove ", letters[remove])
letters = append(letters[:remove], letters[remove+1:]...)
fmt.Println("After", letters)
}
}
运行上面代码输出为
Before [0 1 2 3 4] Remove 2
After [0 1 3 4]
结构体
go中根据首字母的大小写来确定可访问的权限,如果首字母大写则可以被其他包访问,如果首字母小写则只能在本包使用。