我在这区别式C进行总结知识点
1.增加数据类型
字典map
package main import "fmt" func main() { testmap := make(map[string]int) //表示创建一个key为string,value的值为int的数据类型。 testmap["dont"] = 24 fmt.Println(testmap) }
数组切片(类似于stl中的vector容器)
package main import "fmt" func main() { var numbers []int //声明一个数组 printSlice(numbers) /* 允许追加空切片 */ numbers = append(numbers, 0) printSlice(numbers) /* 向切片添加一个元素 */ numbers = append(numbers, 1) printSlice(numbers) /* 同时添加多个元素 */ numbers = append(numbers, 2,3,4) printSlice(numbers) /* 创建切片 numbers1 是之前切片的两倍容量*/ numbers1 := make([]int, len(numbers), (cap(numbers))*2) /* 拷贝 numbers 的内容到 numbers1 */ copy(numbers1,numbers) printSlice(numbers1) }
func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%v ",len(x),cap(x),x) }
2.函数多返回值的特性,对于忽略不关心的返回值可以使用“_”来占位填充。
3.错误处理:
defer():延迟调用,多个defer,依次入栈,在函数即将退出时,依次出栈调用
package main import "fmt" func main() { defer func() { fmt.Println("defer one") }() defer func() { fmt.Println("defer two") }() defer func() { fmt.Println("defer three") }() }
panic():单独使用其后的代码不会执行;
与defer结合使用,panic触发错误,defer依次出栈调用,没有recover捕获的情况下,最后才打印错误;
与defer、recover结合使用,panic触发错误,defer依次出栈调用,直到被recover捕获,打印捕获的信息,之后继续defer出栈。
recover():只有在defer中调用,才有效,否则返回nil
4.并发编程
启动goroutine模式,即启动协程,搭配channel(通道)联合使用
goroutine是go语言中并发的执行单位。channel是go语言中各个goroutine之间的通信机制
package main import "fmt" func main(){ messages := make(chan string) go func(){messages <- "ping"} }
5.反射
反射就是用来检测存储在接口变量内部(值value;类型concrete type) pair对的一种机制。
基本功能:
①TypeOf:获取目标对象的类型,TypeOf:获取目标对象的值
示例:
package main import ( "fmt" "reflect" ) func main() { var num float64 = 1.2345 fmt.Println("type: ", reflect.TypeOf(num)) fmt.Println("value: ", reflect.ValueOf(num)) } 运行结果: type: float64 value: 1.2345
②获取接口信息
③设置实际变量的值
④进行方法的调用
参考链接:https://studygolang.com/articles/12348?fr=sidebar
6.对于常量的赋值是编译器行为,故右值不能出现任何需要运行期才能得出结果的表达式
7.预定义变量“itoa:0”,默认值为0,每遇到一个const就被重置为0,进行下一次从0累加。
8.循环方式:采用for、range
9.内置函数make(类型,参数)——创建变量
10函数命名规则:小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用