Go Core - List + Ring
|Word Count:0|Reading Time:1mins
Author: zhongmingmao
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2022-05-15
Go Core - Array + Slice

2022-05-15
Go Core - Entity

2022-02-06
Cloud Native Foundation - Go Sync
线程安全 锁 Go 不仅提供了基于 CSP 的通讯模型,也支持基于共享内存的多线程数据访问 sync 包提供了锁的基本原语 同步工具 用途 sync.Mutex 互斥锁:Lock加锁,Unlock解锁 sync.RWMutex 读写分离锁:不限制并发读,只限制并发写和并发读写 sync.WaitGroup 等待一组 goroutine 返回,类似于 Java 的 CountDownLatch sync.Once 保证某段代码只执行1次,典型场景:单例模式 sync.Cond 让一组 goroutine 在满足特定条件时被唤醒,典型场景:生产者消费者模型 Mutex12345678910111213141516171819202122232425262728293031323334353637func unsafeWrite() { // fatal error: concurrent map writes conflictMap := map[int]int{} for i := 0; i < 100; i++ ...

2022-12-23
Go - Block + Scope
Variable Shadowing1234567891011121314151617package mainimport "fmt"var a = 11func foo(n int) { // 局部变量遮蔽了同名的包级变量 a := 1 a += n}func main() { fmt.Println(a) // 11 foo(5) fmt.Println(a) // 11} BlockExplicit Block 大括号包裹 12345678func foo() { // Block 1 { // Block 2 { // Block 3 { // Block 4 } } }} Explicit Block 是包裹在大括号内部的声明和语句序列 如果一对大括号内没有任何声明和其它语句,为空 Block Block 支持嵌套 Implic...

2022-03-14
Go Engineering - IAM
概述 IAM:Identity and Access Management 用途:在特定条件下,用户能够对哪些资源做哪些操作 工作流程 3 种平台资源:User、Secret、Policy 系统架构 核心功能 创建平台资源 用户通过 iam-webconsole 或者 iamctl 请求 iam-apiserver,完成 User、Secret、Policy 的 CRUD iam-apiserver 将这些资源持久化到 MySQL 中 请求 API 完成资源授权 用户通过 iam-authz-server 的 /v1/authz 接口进行资源授权 请求 /v1/authz 接口需要通过密钥认证,认证通过后会查询授权策略,从而决定资源是否被允许 为了提高 /v1/authz 接口的性能,iam-authz-server 将密钥和策略缓存在内存中 iam-authz-server 通过 gRPC 调用 iam-apiserver,将密钥和策略缓存到内存中 为了保证数据的一致性,借助 Redis Channel 当 iam-ap...

2022-04-23
Go Engineering - Foundation - Makefile
使用 先编写 Makefile 文件,指定整个项目的编译规则,然后通过 Linux make 命令来解析该 Makefile 文件,实现自动化 默认情况下,make 命令会在当前目录下,按照 GNUmakefile、makefile、Makefile(推荐)的顺序查找 make -f golang.mk 或者 make --file golang.mk 规则 规则一般由目标、依赖和命令组成,用来指定源文件编译的先后顺序 Makefile 规则可以自动判断是否需要重新编译某个目标,从而确保目标仅在需要时编译 规则语法 主要包括:target、prerequisites 和 command 1234target ...: prerequisites ... command ... ... target 可以是一个 object file,也可以是一个执行文件,还可以是一个标签 可以使用通配符,当有多个目标时,使用空格分隔 prerequisites:代表生成该 target 所需要的依赖项,当有多个依赖项时,使用空格分隔 command:代表该 target ...
Announcement
Things are always unexpected!





