随笔分类 -  Go

1 2 3 4 5 下一页

[AI生成] github smux源码分析
摘要:https://github.com/xtaci/smux 特点 smux = 在一条 TCP 连接里,同时跑多条虚拟 “数据流”普通 TCP:一条连接 = 一条路,只能发一股数据smux 多路复用:一条连接 = 一条高速公路,里面划分多条车道,同时跑多组数据互不干扰作用:省连接、省资源、更快、更稳 阅读全文

posted @ 2026-04-06 14:46 王景迁 阅读(10) 评论(0) 推荐(0)

[AI生成] 基于smux实现在单条TCP连接上收发http
摘要:工作流程 Client -->|1. 建立 TCP 连接| Server Server -->|2. 连接建立成功| Client Client -->|3. 创建 SMUX 会话| Server # 这里只调用了GET / Client -->|4. 请求 1: GET /| Server Cli 阅读全文

posted @ 2026-04-06 10:26 王景迁 阅读(3) 评论(0) 推荐(0)

go 定义枚举值
摘要:go没有枚举类型,可以通过iota来定义枚举值。 package main import "fmt" type Status int const ( Unknown Status = iota Success Fail ) func main() { // 输出1 fmt.Println(Succe 阅读全文

posted @ 2026-04-05 09:11 王景迁 阅读(7) 评论(0) 推荐(0)

go net/http缺点和改进
摘要:go net/http在每次建立连接时,都会创建一个goroutine来处理,即一个连接绑定一个goroutine,在高并发情况消耗大量资源。 fasthttp在每次建立连接时,优先从工作池里面获取已有的处理对象,不够时再创建,即一个连接绑定一个goroutine。不同于go net/http库处理 阅读全文

posted @ 2026-03-21 17:18 王景迁 阅读(9) 评论(0) 推荐(0)

go http server优雅关闭Shutdown方法
摘要:go 1.24.0 用法 package main import ( "context" "log" "net/http" "os" "os/signal" "syscall" "time" ) func main() { mx := http.NewServeMux() mx.HandleFunc 阅读全文

posted @ 2026-03-21 15:49 王景迁 阅读(5) 评论(0) 推荐(0)

go实现单机版限流
摘要:go get golang.org/x/time/rate package main import ( "log" "time" "golang.org/x/time/rate" ) func main() { // 创建一个每秒产生5个令牌,桶容量为10的限流器 log.Printf("调整前") 阅读全文

posted @ 2026-03-05 08:02 王景迁 阅读(10) 评论(0) 推荐(0)

gorm使用事务的2种方式
摘要:方式1:基本事务(常用) err := db.Transaction(func(tx *gorm.DB) error { // 执行事务操作 return nil }) 方式2:手动事务 // 开始事务 tx := db.Begin() defer func() { if r := recover( 阅读全文

posted @ 2025-11-21 08:57 王景迁 阅读(21) 评论(0) 推荐(0)

go http request WithContext和NewRequestWithContext方法
摘要:go有2个方法设置request的context,实现上下文在同一个request中传递。方法1:WithContext func (r *Request) WithContext(ctx context.Context) *Request 浅拷贝旧的request,返回新的request,新老re 阅读全文

posted @ 2025-11-07 09:11 王景迁 阅读(56) 评论(0) 推荐(0)

go 并发赋值安全性
摘要:32/64位机器读写占用空间小于或等于32/64位的变量是原子操作,超过时属于非原子操作。 安全的赋值类型基本数据类型:字节型、布尔型、整型、浮点型、字符型其他数据类型:指针、函数 不安全的赋值类型基本数据类型:复数型、字符串其他数据类型:数组、切片、字典、通道、接口、结构体 可以通过atomic. 阅读全文

posted @ 2025-10-19 16:41 王景迁 阅读(14) 评论(0) 推荐(0)

go http实现长连接
摘要:服务端 package main import ( "net/http" "time" ) func handler(w http.ResponseWriter, r *http.Request) { f := w.(http.Flusher) for { w.Write([]byte("1\n") 阅读全文

posted @ 2025-08-28 22:32 王景迁 阅读(20) 评论(0) 推荐(0)

go http trace分析耗时
摘要:package main import ( "crypto/tls" "fmt" "log" "net/http" "net/http/httptrace" "time" ) func main() { req, _ := http.NewRequest("GET", "https://www.ba 阅读全文

posted @ 2025-08-17 20:45 王景迁 阅读(20) 评论(0) 推荐(0)

go select选择case分析
摘要:场景 条件 执行default 存在default,且无case满足。 阻塞 没有default,且无case满足。 选择单个case执行 如果只有1个case满足,那么直接执行;如果有多个case满足,那么随机选择执行,通过随机来保证公平性。 阅读全文

posted @ 2025-07-27 07:53 王景迁 阅读(10) 评论(0) 推荐(0)

go map不能使用指针作为key
摘要:package main import "fmt" type student struct { name string age int } func main() { m := make(map[*student]bool) s1 := &student{ name: "a", age: 17, } 阅读全文

posted @ 2025-07-18 08:16 王景迁 阅读(18) 评论(0) 推荐(0)

go 设置http请求超时时间
摘要:10.11.12.13不真实存在,ping会超时。 使用 http.Client 设置全局超时 package main import ( "net/http" "time" ) func main() { client := &http.Client{ Timeout: 5 * time.Seco 阅读全文

posted @ 2025-07-18 08:09 王景迁 阅读(94) 评论(0) 推荐(0)

go 切片删除某个元素
摘要:package main import "fmt" func delete(s []int, num int) []int { for i := 0; i < len(s); i++ { if s[i] == num { s = append(s[:i], s[i+1:]...) i-- } } r 阅读全文

posted @ 2025-07-12 17:31 王景迁 阅读(13) 评论(0) 推荐(0)

go 使用options扩展参数
摘要:package main import ( "fmt" ) type Config struct { path string isUseFile bool } type ConfigOption func(config *Config) error func WithPath(path string 阅读全文

posted @ 2025-06-22 16:17 王景迁 阅读(15) 评论(0) 推荐(0)

go url parse
摘要:url = schema(http/https) + "//" + host(ip:port/domain:port) + path(/xxx) + "?" + rawQuery(xxx=xxx) package main import ( "fmt" "net/url" ) func parseU 阅读全文

posted @ 2025-06-22 11:50 王景迁 阅读(27) 评论(0) 推荐(0)

go context value保存map
摘要:go context虽然只能保存一对key和value,但是支持any;虽然获取value时支持不断从父context中找,但是无法获取所有kv。 package main import ( "maps" "context" "fmt" ) // context推荐使用自定义结构体类型作为key,与 阅读全文

posted @ 2025-06-21 11:00 王景迁 阅读(37) 评论(0) 推荐(0)

go https代理认证
摘要:curl --proxy-header "代理认证信息" --proxy "代理地址" https://xxx 这里--proxy-header和普通header -H不等价,虽然两者类型相同,但是前者只发送给代理服务端(仅限https场景),后者只发送给服务端。 go Transport实现了ht 阅读全文

posted @ 2025-06-20 22:04 王景迁 阅读(35) 评论(0) 推荐(0)

go 基于beego+swagger生成支持直接调用的接口文档
摘要:安装工具 go get github.com/astaxie/beego go get github.com/beego/bee 创建API项目 # 必须在GOPATH下创建项目,否则无法在routers目录下生成commentsRouter_controllers.go,访问URL会报错404 c 阅读全文

posted @ 2025-05-31 23:04 王景迁 阅读(44) 评论(0) 推荐(0)

1 2 3 4 5 下一页

导航