天天看点

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

1.学习方法

    28法则,花百分之百的精力去掌握百分之二十的重点知识。重点知识掌握好了之后能应付百分之八十日常开发

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

2.内建方法make()

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

   slice切片,类似于数组,map不用说,chan是管道,用于两个线程之间通信用的。数据通过管道交互。

通过make函数创建切片:

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

通过make创建map:

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

通过make创建chan

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

3.内建方法new

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

  用new创建的map返回的是这个类型的指针,make创建出来的是引用类型  没有*

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

3.内建方法append copy delete

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

 append方法作用于切片

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

4.内建方法panic recover

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

  抛出异常

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

捕获异常

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

根据异常类型处理

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

抛出error类型的

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

5.内建方法len  cap  close

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

  len

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

cap容量

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

close  往管道里面写1

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

整个方法执行完成后执行close()方法

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

6.结构体   若干字段的一个集合

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

  创建以及初始化一个结构体

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

第二种声明方式

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

方式3  传进去的是dog  返回回来的是指向dog的指针

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

7.结构体 属性及函数

    结构体 函数: 传入的参数是一个dog的指针

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

调用:这里要用new 来创建,返回的才是指针,这个run的方法直接就可以调用了。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

改成小写的方法名就不能再main函数里面调用了,他是通过首字母大小写来控制作用域的,作用域两个,一个是package内和package外,package外必须要首字母大写。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

8. 结构体--组合

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

   Dog这个结构体继承自Animal这个结构体,这就是组合。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

  给父结构体加一个方法

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

然后子类可以使用父类的属性和方法

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

9.接口--实现

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

公共方法集合

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

 结构体里面两个方法的实现,加上返回值,他就自动关联上了,因为Dog这个结构体,实现了接口里面的方法,所以Dog就实现了这个接口。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

10.接口--多态

   我们的变量不能通过结构体去定义 必须通过接口来定义。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

  再定义一个结构体Cat

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

声明的是一个接口,赋值的是一个具体类型

然后调用方法,这就是多态

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

 用匿名的方式创建

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

11.并发--协程

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

  协程比线程还轻量

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

写一个方法输出1到10

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

开启两个协程同时去执行,两个协程是并行的。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

用runtime的api来限制协程的核心数

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

12.并发--协程通信

   channel 可以和select配合使用

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

 先定义一个channel,类型是int类型,缓存是10。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

写两个方法,一个发送  一个接受

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

两个协程来一个发送 一个接受

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

for循环里面有一个select,他会一直接收数据,select是从不同的channel里面去读取数据,随机选择channel

再定义一个channel

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

13.并发--协程同步

https://zhuanlan.zhihu.com/p/74047342

在我理解,go的协程是为了解决多核CPU利用率问题,go语言层面并不支持多进程或多线程,但是协程更好用,协程被称为用户态线程,不存在CPU上下文切换问题,效率非常高。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

多个协程,每个协程读取同一个文件,需要等到写文件的协程,将读出来的数据全部写入成功我们才能进行后面的操作。

使用系统的工具

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

写一个读取数据的方法,循环添加三条协程记录

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

    写一个写入数据的方法,并且在写入成功之后把它的协程记录删除掉一条

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

测试,在主协程里面去读取数据,起一个协程去写入数据,然后等待写入完成。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

14. 指针

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

定义一个指针,为指针赋值,取指针指储存的内存地址,取指针指向地址的值。

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

指针&数组

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

指针数组和数组指针

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

15. JSON序列化

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

   先定义一个结构体

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

序列化,注意要大写

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

map的序列化

先定义一个map,map的key是string类型,map的值是object类型,这里的interface{} 就相当于object

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)
Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

这个就是tag,序列化的时候,用name来替换ServerName

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

Json反序列化

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

反序列化为结构体

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)

反序列化Map

Go--03(go语言进阶内建方法,结构体,接口,并发, 指针,JSON序列化)