08 2024 档案

摘要:原创文章,欢迎转载,转载请注明出处,谢谢。 Go plan9 汇编系列文章: Go plan9 汇编: 打通应用到底层的任督二脉 Go plan9 汇编:手写汇编 Go plan9 汇编:说透函数栈 Go plan9 汇编:内存对齐和递归 0. 前言 作为一个严肃的 Gopher,了解汇编是必须的。 阅读全文
posted @ 2024-08-31 17:46 hxia043 阅读(318) 评论(0) 推荐(0) 编辑
摘要:原创文章,欢迎转载,转载请注明出处,谢谢。 0. 前言 在 Go 互斥锁 Mutex 源码分析(一) 一文中分析了互斥锁的结构和基本的抢占互斥锁的场景。在学习锁的过程中,看的不少文章是基于锁的状态解释的,个人经验来看,从锁的状态出发容易陷入细节,了解锁的状态转换过一段时间就忘,难以做到真正的理解。想 阅读全文
posted @ 2024-08-24 13:27 hxia043 阅读(210) 评论(0) 推荐(0) 编辑
摘要:原创文章,欢迎转载,转载请注明出处,谢谢。 0. 前言 锁作为并发编程中的关键一环,是应该要深入掌握的。 1. 锁 1.1 示例 实现锁很简单,示例如下: var global int func main() { var mu sync.Mutex var wg sync.WaitGroup for 阅读全文
posted @ 2024-08-23 15:41 hxia043 阅读(244) 评论(0) 推荐(1) 编辑
摘要:逃逸分析 逃逸分析是 Go 的特性之一,也是面试中经常容易问到的地方。逃逸分析是编译器为变量确定内存分配的一种分析方式。在编译期间,编译器会确定变量在堆中分配还是栈中分配。 在 C/C++ 中,开发者手动分析变量在内存中的堆还是栈中分配,如果内存在堆中分配,不回收释放的话会影响内存泄漏,这对于开发者 阅读全文
posted @ 2024-08-19 15:02 hxia043 阅读(43) 评论(0) 推荐(0) 编辑
摘要:goroutine 在操作系统层面,线程是通过内核调度器调度,通过保存/恢复线程上下文的方式实现线程的调度,内核中的线程是固定大小,不够灵活。相对而言,Go 提供了语言层面的线程 goroutine,它的初始化大小只有 2K,不同于线程操作系统的是它的大小是动态变化的,足够灵活。 Go 实现了调度器 阅读全文
posted @ 2024-08-15 11:05 hxia043 阅读(16) 评论(0) 推荐(0) 编辑
摘要:接口 接口需要注意的是接口的基本结构,类型断言等。 接口和方法 从 函数和方法 一节中我们知道,方法是值接收者和指针接收者加指针结构体和值结构体都行的。但是引入接口的方法就有一种情况不行。示例如下: type printer interface { print() } type file struc 阅读全文
posted @ 2024-08-15 11:05 hxia043 阅读(5) 评论(0) 推荐(0) 编辑
摘要:函数 函数我们需要注意的是,函数的签名。在 Go 中只有函数签名而无函数体的函数,是因为该函数由其它语言实现的。我们在汇编一节中会继续介绍。 迭代变量 有一个容易犯错的点在于迭代变量,它可能更符合作用域的范畴,但和延迟函数有关联,这里把它放在函数一节加以介绍。 如下示例: func tempDirs 阅读全文
posted @ 2024-08-15 11:04 hxia043 阅读(20) 评论(0) 推荐(0) 编辑
摘要:数据类型 数据类型是 Go 的基础。其中,包括基本类型,聚合类型,引用类型和接口类型。 基本类型 基本类型如整型,浮点型等,传的是值。如: var x int = 10 这里需要注意的是,10 是无类型常量,在编译时将 10 赋给了 x。我们可以改造代码示例如下: var x int8 = 256 阅读全文
posted @ 2024-08-15 11:03 hxia043 阅读(18) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示