Golang知识点总结
1. 值类型和引用类型
- 值类型:变量直接存储,内存通常在栈中分配。
- 引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆中分配。通过GC回收。
go中值类型:基础数据类型int、float、bool、string、数组、结构体
引用类型:slice、map、channel、interface
2. new和make的区别
都在堆上分配内存。
new:用于各种类型的内存分配,new返回指针,指向新分配的类型的零值。
make:只用于内建类型(slice、map和channel)的内存分配。make返回的是类型,是经过初始化的值。
new函数分配内存,make函数初始化,填充适当的值。
3. 什么是接口
接口是一组只有定义,没有具体实现的方法的集合,任何类型如果实现了接口的所有方法,就认为是实现了这个接口。在go中,接口的实现是隐式的。
空接口不包含任何方法,所有的类型都实现了空接口,因此,空接口可以存储任何的数据。
4. 进程、线程和协程的区别
进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元; 一个进程可以包含多个线程,进程和线程都是由操作系统进行调度。
协程是比线程更轻量的执行单元,一个线程可以有多个协程。 协程不是由操作系统进行管理,而是完全由程序自己控制。
5. Goroutine
在Go中,每一个并发的执行单元叫做Goroutine。
6. channel
channel是Go中唯一的线程安全的类型
channel是Goroutine之间的通信机制。可以传输数据。
7. select
8. 什么样的字段适合做索引
- where条件中经常出现的
- 重复少的
- 长度短的
9. 简述一下RESTful API
RESTful是API的一种设计规范,符合REST的约束和规则,就是RESTful。
- 面向资源,每个URI代表一种资源
- 通过Json进行数据交互
- 通过HTTP方法对资源进行操作:GET、POST、PUT、PATCH、DELETE
10. 常用的设计模式
- 单例模式:保证一个类仅有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。(创建型模式)
- 适配器模式:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。
- 代理模式: 在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。
- 观察者模式:建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。