← 返回目录

Go并发

第 10 / 29 卷日期:

Ageint }

// 方法 func (p *Person) SayHello() {

fmt.Println("Hello, my name is", p.Name)

}

  1. Go语言通过接口来定义对象的行为,而不是通过明确的继承关系。一个类型只要实现了接口定义的方法,就

被视为实现了该接口。

type Speaker interface { Speak()

}

type Person struct { Name string

}

// Person 实现了 Speaker 接口 func (p *Person) Speak() {

fmt.Println("Hello, my name is", p.Name)

}

  1. Go语言通过结构体的组合特性来实现对象的组合。一个结构体可以包含其他结构体作为其字段,从而实现对

象的复用。

  1. 尽管Go语言没有像传统面向对象语言那样的私有成员访问修饰符,但通过首字⺟大小写来控制成员的可见

性,实现了封装的效果。首字⺟大写的成员是公有的,可以被外部包访问;首字⺟小写的成员是私有的,只能在定义的包内访问。

Go并发

进程、线程、协程

进程、线程和协程都是并发编程的概念

进程是操作系统分配资源的基本单位,每个进程都有自己的独立内存空间,不同进程之间的数据不能直接共享, 通常通过进程间通信(IPC)来进行数据交换,例如管道、消息队列等。

线程是操作系统调度的最小执行单位,同一进程的不同线程共享相同的内存空间,可以直接访问共享数据。

协程是轻量级的用户态线程,由Go调度器进行管理,协程的创建和销毁比线程更为轻量,可以很容易地创建大量的协程。协程之间通过通信来共享数据,而不是通过共享内存。这通过使用通道(channel)等机制来实现。

全站分卷索引 · 29 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(Go篇))
  2. 2Go string 和 []byte 的区别
  3. 3数组和切片的区别
  4. 4扩容前后的Slice是一样的吗
  5. 5Go语言map是有序的还是无序的, 为什么
  6. 6go里面的map是并发安全的吗?如何并发安全
  7. 7Go 的错误处理和 Java 的异常处理对比
  8. 8介绍一下panic和recover
  9. 9什么是defer?有什么作用
  10. 10Go并发
  11. 11进程、线程的区别
  12. 12什么是go runtine
  13. 13Go语言中的Channel是什么, 有哪些用途,如何处理阻塞
  14. 14什么是互斥锁(mutex)?在什么情况下会用到它们?
  15. 15Mutex有几种模式
  16. 16goroutine什么情况会发生内存泄漏?如何避免。
  17. 17Go语言中GC的流程是什么
  18. 18Go 中的内存逃逸现象是什么?
  19. 19CAP 理论,为什么不能同时满足
  20. 20说一下 Gin 的路由怎么实现的
  21. 21简述slice的底层原理,和数组的区别是什么
  22. 22defer底层原理
  23. 23侵入式和非侵入式的区别
  24. 24goroutine与线程的区别
  25. 25goroutine在什么情况下会被挂起呢?
  26. 26GC(垃圾回收)原理 1.5版本
  27. 27简述Go的垃圾回收机制
  28. 28协程优势及其通信方式
  29. 29Go的内存对齐