Golang
文章平均质量分 62
golang使用记录
elihe2011
Golang, Python, Docker, K8S
展开
-
String, Int 和 Byte数组
TCP 报文组装和解析原创 2022-06-30 09:07:34 · 351 阅读 · 0 评论 -
Golang 标准库 context
Golang 标准库 context1. 基本概念2. 实现说明2.1 Context2.2 emptyCtx2.3 cancelCtx2.4 valueCtx2.5 timerCtx3. 实例3.1 WithCancel3.2 WithDeadline3.3 WithTimeout3.4 WithValue4. 总结4.1 传递共享的数据4.2 取消goroutine4.3 防止goroutine泄漏5. Context使用原则:1. 基本概念context 管理了一组呈现树状结构的 Goroutin原创 2020-10-18 15:55:20 · 230 阅读 · 0 评论 -
Golang Interface小结
1. 概述1.1 简介接口是一种规范,描述了类的行为和功能,而不做具体实现C++定义接口的方式称为“侵入式”,而Go采用的是“非侵入式”,不需要显式声明,只需要实现了接口定义的函数,编译器自动识别。1.2 鸭子类型If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.Duck Typing: 鸭子类型,是动态编程语言的一种对象推断策略,它更关注对象能如何被使用,原创 2022-04-28 15:19:13 · 312 阅读 · 0 评论 -
Golang 文件操作
1. 读文件os.Open(name string) (file *File, err error)os.OpenFile(name string, flag int, perm FileMode) (*File, error)ioutil.ReadFile(name string) ([]byte, error)1.1 带缓存读func main() { file, err := os.Open("./abc.txt") if err != nil { fmt.Printf("Ope原创 2022-04-28 13:44:13 · 745 阅读 · 0 评论 -
Golang 逃逸分析
1. 栈和堆Heap:内存的分配和释放都由编译器进行管理,分配和释放的速度非常快Stack:不会自动清理,会引起频繁地GC操作,而垃圾回收操作会占用较大的系统开销2. 逃逸分析逃逸分析是对变量放在堆上还是栈上的分析,该分析在编译阶段完成。如果一个变量超过了函数调用的生命周期,即该变量在函数外部存在引用,编译器会把这个变量分配到堆上,此时该变量发生了逃逸。go run -gcflags '-m -l' main.go-m print optimization decisions 代码编原创 2021-12-24 09:56:26 · 389 阅读 · 0 评论 -
Kafka Golang集成
使用 sarama 连接kafkago get -u github.com/Shopify/sarama1. Topic// 客户端client, err := sarama.NewClient(brokers, config)// 管理员clusterAdmin, err := sarama.NewClusterAdminFromClient(client)// topic 新增err = clusterAdmin.CreateTopic(topicName, topicDetail原创 2021-12-10 15:58:26 · 1350 阅读 · 0 评论 -
Golang 数据库 sqlx
1. Getting Startedgo get github.com/jmoiron/sqlxgithub.com/go-sql-driver/mysql2. Handle Types4 handle types:sqlxdatabase/sqlsqlx.DBsql.DBsqlx.Txsql.Txsqlx.Stmtsql.Stmtsqlx.NamedStmt2 cursor types:sqlxdatabase/sqlfrom原创 2021-06-30 18:07:23 · 454 阅读 · 0 评论 -
Golang RPC总结
Golang RPC总结1. RPC1.1 Go 语言实现 RPC2. 简单实例2.1 服务端2.2 客户端3. 接口化拆分4. 跨语言RPC4.1 测试服务端4.2 测试客户端5. RPC over HTTP6. 实战示例6.1 基于RPC实现Watch功能6.2 反向RPC6.3 上下文信息1. RPC客户端(client): 服务调用的发起方客户端存根(client Stub):运行在客户端机器上存储调用服务器地址将客户端请求数据信息打包通过网络发给服务端存根程序接收服务端响应的数原创 2020-11-27 10:57:44 · 480 阅读 · 0 评论 -
Golang defer小结
Golang defer小结1. 概念2. 循环3. 闭包4. 性能5. 复杂表达式6. 函数返回值1. 概念defer: 延迟调用FILO 先进后出即使函数发生panic错误,也会执行支持匿名函数调用用于资源清理、文件关闭、解锁以及记录时间等操作与匿名函数配合,可在return后修改函数的计算结果func main() { for i := 0; i < 3; i++ { defer fmt.Println(i) // 2 1 0 } for i := 0; i原创 2020-10-20 16:15:37 · 107 阅读 · 0 评论 -
Golang 标准库 reflect
Golang 标准库 reflect1. 概念1.1 什么是反射1.2 反射的三大定律1.2.1 第一定律1.2.2 第二定律1.2.3 第三定律2. 类型(Type)2.1 Type和Kind的区别2.2 方法 `Type.Elem()`2.3 辅助判断方法2.4 结构体3. 值(Value)3.1 通过反射,修改内容3.2 通道对象设置3.3 空接口判断3.4 结构体3.5 结构体匿名字段或嵌入字段4. 总结4.1 调用方法4.2 调用变参方法4.3 构建类型 (MakeXXX())4.4. 复合体反射原创 2020-10-20 11:32:20 · 516 阅读 · 1 评论 -
Golang 标准库 sync/atomic
Golang 标准库 sync/atomic1. 基本概念2. 原子操作 vs 锁3. 五种操作3.1 增或减3.2 载入3.3 比较并交换3.4 存储3.5 交换4. 原子值1. 基本概念原子操作:指的是一个操作或一系列操作在被CPU调度的时候不可中断。即在并发中,保证多CPU对同一块内存的操作是原子性的。原子操作的实现方式:总线加锁:CPU和其他硬件的通信通过总线控制,所以可以通过Lock总线的方式实现原子操作,但这样会阻塞其他硬件对CPU的访问,开销太大缓存锁定:频繁使用的内存会被处理器原创 2020-10-19 11:39:35 · 590 阅读 · 2 评论 -
Golang GC
Golang GC1. 垃圾回收方法1.1 引用计数1.2 标记-清除1.3 节点复制1.4 分代搜集2. Golang的GC2.1 GC 流程2.2 三色标记:在Mark阶段2.3 三色标记的主要过程:2.4 STW: Stop The World3. 触发GC的两种方式4. GC参数调节5. 内存分配5.1 内存四区5.2 栈 和 堆6. 内存逃逸1. 垃圾回收方法引用计数 (reference counting)标记-清除 (mark & sweep)节点复制 (copyi原创 2020-10-18 17:31:38 · 469 阅读 · 1 评论 -
Golang Select & 定时器
Golang Select & 定时器1. Select1.1 管理多个通道1.2 作为发送者1.3 超时处理1.4 避免造成死锁2. 定时器2.1 一次性定时任务2.2 周期性定时任务2.3 延迟操作总结1. Selectselect: 管理多个channel,监听channel上的数据流动。类似switch语法,但每个case语句必须是IO操作。多个case同时满足,任选一个执行。处理一个或多个channel的发送和接收同时有多个channel时,随机处理可用空select来阻塞ma原创 2020-10-18 10:07:39 · 3635 阅读 · 0 评论 -
Golang Channel小结
Golang Channel1. 基本概念2. channel的应用2.1 停止信号2.2 任务定时2.3 解藕生产者和消费者2.4 控制并发数3. 优雅地关闭 channel4. 操作channel的总结5. channel引起资源泄漏6. 实例6.1 分段计算6.2 阻塞主线程6.3 通道遍历和关闭6.4 主程序可能不等待goruntine6.4.1 方法一:使用缓存channel6.4.2 方法二:通过同步解决(sync.WaitGroup)2.5 模拟打印机2.6 带缓冲的通道6.7 单向通道1.原创 2020-10-18 09:53:01 · 249 阅读 · 0 评论 -
Golang Goroutine小结
Golang 协程1. CSP 并发模型2. 协程、线程、进程3. 并发的实现原理3.1 用户级线程模型3.2 内核级线程模型3.3 两级线程模型(即混合型线程模型)4. G-P-M 模型5. Golang 并发控制模型6. gorountine调度时机1. CSP 并发模型Communication Sequential ProcessesDo not communicate by sharing memory; instead, share memory by communicating.不要原创 2020-10-17 21:19:58 · 501 阅读 · 0 评论 -
Golang 标准库 sync
Golang 标准库 sync1. Mutex2. RWMutex3. Cond4. WaitGroup5. Once6. Map7. Pool1. Mutex互斥锁,等同于Linux下的pthread_mutex_tfunc (m *Mutex) Lock()func (m *Mutex) Unlock()// 多个线程同时运行,获的Mutex锁的线程优先运行,其余线程阻塞等待func testMutex() { mutex := sync.Mutex{} for i := 0; i原创 2020-10-17 14:07:16 · 242 阅读 · 1 评论 -
Golang 引用类型 map
golang原创 2020-10-17 11:16:37 · 1053 阅读 · 0 评论