Go Core - Array + Slice
|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 - Entity

2022-05-15
Go Core - List + Ring

2022-10-11
Cloud Native Foundation - Go IO
阻塞 IO 阻塞:等待数据就绪 阻塞 + 同步 非阻塞 IO 非阻塞:等待数据就绪 轮询:效率不高 非阻塞 + 同步 IO 多路复用 (集中线程)阻塞 + 同步 当数据就绪后,集中线程会唤醒其他线程,阻塞的仅仅只是一个线程 select / poll 通过传参的形式来轮询 fd 列表,长度有上限(1024) epoll 通过 mmap 将用户态的内存和内核态的内存进行共享,不再需要传参,解决了 fd 长度受限的问题 基于事件侦听,而非轮询wq: wait queue, rdlist: ready list, rbr: red black tree Go HTTP:goroutine 与 fd 绑定 异步 IO 非阻塞 + 异步 异步:拷贝数据(Socket 缓冲区 -> 应用缓冲区)的过程也是由 Kernel 来完成

2023-05-10
Go Engineering - CLI
应用框架 命令行参数解析 - Pflag 配置文件解析 - Viper 应用的命令行框架 - Cobra 命令需要具备 help 功能 命令需要能够解析命令行参数和配置文件 命令需要能够初始化业务代码,并最终启动业务进程 Pflag 命令行参数解析工具 - Kubernetes / Istio / Helm / Docker / Etcd / … Flag 一个命令行参数会被解析成一个 Flag 类型的变量 1234567891011121314// A Flag represents the state of a flag.type Flag struct { Name string // name as it appears on command line Shorthand string // one-letter abbreviated flag Usage string ...

2022-04-16
Go Engineering - Specification - Design Pattern
GoF 创建型模式 提供一种在创建对象的同时隐藏创建逻辑的方式,而不是直接使用 new 运算符直接实例化对象 单例模式 分为饿汉方式(包被加载时创建)和懒汉方式(第一次使用时创建) 饿汉方式1234567891011package hungertype singleton struct {}// 实例是在包被导入时被初始化的var ins *singleton = &singleton{}func GetIns() *singleton { return ins} 懒汉方式 非并发安全,需要加锁 1234567891011121314151617181920package singletonimport "sync"type singleton struct {}var ins *singletonvar lock sync.Mutexfunc GetIns() *singleton { if ins == nil { lock.Lock(...

2023-05-06
Go Engineering - Lint
golangci-lint 使用最多 优点 Advantage Desc 速度快 基于 gometalinter 开发,但比 gometalinter 快 5 倍原因:并行检查 + 复用 go build 缓存 + 缓存分析结果 可配置 支持 YAML 格式的配置文件 IDE 集成 Goland / VS Code linter 聚合器 不需要单独安装 最少误报数 调整了所集成 linter 的默认配置,大幅度减少误报 良好的输出 颜色、行号等 迭代快 不断有新的 linter 被集成到 golangci-lint 中 选项 配置 同时出现 - 命令行选项 / 配置文件 bool/string/int - 命令行选项 slice - 合并 命令行选项 golangci-lint run -h Flag Desc –print-issued-lines Print lines of code with issue (default true) –print-linter-name Print lin...
Announcement
Things are always unexpected!





