Golang知识点总结

Share on:

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。

  1. 面向资源,每个URI代表一种资源
  2. 通过Json进行数据交互
  3. 通过HTTP方法对资源进行操作:GET、POST、PUT、PATCH、DELETE

10. 常用的设计模式

  • 单例模式:保证一个类仅有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。(创建型模式)
  • 适配器模式:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。
  • 代理模式: 在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。
  • 观察者模式:建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。