1.学习方法
28法则,花百分之百的精力去掌握百分之二十的重点知识。重点知识掌握好了之后能应付百分之八十日常开发
2.内建方法make()
slice切片,类似于数组,map不用说,chan是管道,用于两个线程之间通信用的。数据通过管道交互。
通过make函数创建切片:
通过make创建map:
通过make创建chan
3.内建方法new
用new创建的map返回的是这个类型的指针,make创建出来的是引用类型 没有*
3.内建方法append copy delete
append方法作用于切片
4.内建方法panic recover
抛出异常
捕获异常
根据异常类型处理
抛出error类型的
5.内建方法len cap close
len
cap容量
close 往管道里面写1
整个方法执行完成后执行close()方法
6.结构体 若干字段的一个集合
创建以及初始化一个结构体
第二种声明方式
方式3 传进去的是dog 返回回来的是指向dog的指针
7.结构体 属性及函数
结构体 函数: 传入的参数是一个dog的指针
调用:这里要用new 来创建,返回的才是指针,这个run的方法直接就可以调用了。
改成小写的方法名就不能再main函数里面调用了,他是通过首字母大小写来控制作用域的,作用域两个,一个是package内和package外,package外必须要首字母大写。
8. 结构体--组合
Dog这个结构体继承自Animal这个结构体,这就是组合。
给父结构体加一个方法
然后子类可以使用父类的属性和方法
9.接口--实现
公共方法集合
结构体里面两个方法的实现,加上返回值,他就自动关联上了,因为Dog这个结构体,实现了接口里面的方法,所以Dog就实现了这个接口。
10.接口--多态
我们的变量不能通过结构体去定义 必须通过接口来定义。
再定义一个结构体Cat
声明的是一个接口,赋值的是一个具体类型
然后调用方法,这就是多态
用匿名的方式创建
11.并发--协程
协程比线程还轻量
写一个方法输出1到10
开启两个协程同时去执行,两个协程是并行的。
用runtime的api来限制协程的核心数
12.并发--协程通信
channel 可以和select配合使用
先定义一个channel,类型是int类型,缓存是10。
写两个方法,一个发送 一个接受
两个协程来一个发送 一个接受
for循环里面有一个select,他会一直接收数据,select是从不同的channel里面去读取数据,随机选择channel
再定义一个channel
13.并发--协程同步
https://zhuanlan.zhihu.com/p/74047342
在我理解,go的协程是为了解决多核CPU利用率问题,go语言层面并不支持多进程或多线程,但是协程更好用,协程被称为用户态线程,不存在CPU上下文切换问题,效率非常高。
多个协程,每个协程读取同一个文件,需要等到写文件的协程,将读出来的数据全部写入成功我们才能进行后面的操作。
使用系统的工具
写一个读取数据的方法,循环添加三条协程记录
写一个写入数据的方法,并且在写入成功之后把它的协程记录删除掉一条
测试,在主协程里面去读取数据,起一个协程去写入数据,然后等待写入完成。
14. 指针
定义一个指针,为指针赋值,取指针指储存的内存地址,取指针指向地址的值。
指针&数组
指针数组和数组指针
15. JSON序列化
先定义一个结构体
序列化,注意要大写
map的序列化
先定义一个map,map的key是string类型,map的值是object类型,这里的interface{} 就相当于object
这个就是tag,序列化的时候,用name来替换ServerName
Json反序列化
反序列化为结构体
反序列化Map