分类: Go

8 篇文章

深入理解Golang中的channel
  为什么需要channel? channel 是用于不同 goroutine 间通信和同步的核心机制。   Q:不是可以共享内存进行通信吗? A: 直接共享内存(如多个 goroutine 直接读写同一变量)会引发竞态条件,需要加锁(mutex)保护,容易出错且难以维护。 Go channel 的设计灵感来源于 CSP(Com…
Golang中的GMP模型原理及调度
被废弃的golang调度器 在2012年之前,用的是P不存在的GM调度器 ​ 线程M 想要执行、放回 协程G 都必须访问全局 G 队列,并且 M 有多个,即多线程访问同一资源需要加锁进行保证互斥 / 同步,所以全局 G 队列是有互斥锁进行保护的。 ​ 这样明显会发现一个问题,当M空闲都申请G时,形成锁竞争;甚至M0申请G、M1放回G都会形成竞争,效…
手撕LRU(Go实现)
    1.使用container/list实现 首先,我们要了解标准库中的双向链表list 标准库list详解 list.go源文件https://cs.opensource.google/go/go/+/refs/tags/go1.24.2:src/container/list/list.go 在 Go 语言的 contai…
gRPC实战
官方文档:https://grpc.org.cn/docs 中文文档:https://doc.oschina.net/grpc 什么是gRPC ​ 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。 ​ 与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服…
Mistakes of Golang
Mistakes of Golang 记录个人在学习和编写go项目/习题时出现的错误 1.字符转换string to int int(a[index]) 这样的转换得到的是字符的 ASCII 码值,而不是二进制数 0 或 1。正确的做法是将字符减去字符 '0' 来得到对应的整数值。 //错误案例 int_a = int(str_…
在Fleet上配置及使用Golang
在Fleet上配置及使用Golang 以下内容在官网教程下实现,https://www.jetbrains.com/help/fleet/getting-started-with-go.html#debugging-your-code Fleet的安装 JetBrains Toolbox:下载页面。 Go SDK:go.dev 上的下载页面。 在T…