函数接受的参数列表中没有指定大小的数组都是切片,例如:
func rotate(matrix [][]int) {}//这里的matrix没有指定大小,也就是默认是切片的方式传的值,也就是引用
func rotate(matrix [5][2]int) {}//这里的matrix指定了大小,也就是按照严格的一维数组传递的值,也就是传递值
结构体有两个关键字:type和struct:
type person strct {
name string
age int
}
// 需要写与该结构体绑定的函数的时候(*** 建议加上指针,方面修改类内部的值,不加默认是按照值的传参,修改这里的p1不改变原类)
func (p1 *person) changeName () {
name = "张三"
fmt.Println(name)
}
make, 创建切片,和map,以及后面的通道和携程
func main() {
// 创建一个包含5个元素的整型切片
slice := make([]int, 5)
m := make(map[string]int, 10)
// 添加键值对
m["one"] = 1
m["two"] = 2
}
string是字符串不是字符切片,要转换成字符切片为:
for _, str := range strs {
s := []byte(str)//转化为字符切片才能进行排序和swap操作
sort.Slice(s, func(i, j int) bool {
return s[i] < s[j]
})
sortedStr := string(s)
mapGroup[sortedStr] = append(mapGroup[sortedStr], str)
}
在go当中指针是代表着地址,可以通过取值*改变它的值,但是要改变它的指向问题,那么只有取二重指针,不能直接改变指向,下面的ch1不能改变a的值,但是ch2可以.(注意对于指针类型,可以把他看作是int类型,要对其进行指向改变,那么只能取二重指针)
package main
import "fmt"
func ch1(a *int) {
b := 9
a = &b
}
func ch2(a *int) {
*a = 9
}
func main() {
fmt.Println("Google" + "Runoob")
a := 5;
ch(&a);
fmt.Println(a)
}