// frame 包示例:应用层帧协议(8 字节头 + 数据)在 net.Pipe 上的读写往返 package main import ( "fmt" "net" "git.zeroonesoft.cn/golib/zogo/frame" ) func main() { c1, c2 := net.Pipe() defer c1.Close() defer c2.Close() // 组帧:版本 + 命令字 + 流 ID + 数据 f := frame.NewFrame(frame.FrameVersion, 0x10, 42) if err := f.Marshal(map[string]any{"msg": "hello"}); err != nil { fmt.Println("Marshal 失败:", err) return } fmt.Println("帧信息:", f) // 写帧 / 读帧 go func() { if err := frame.WriteFrame(c1, f); err != nil { fmt.Println("WriteFrame 失败:", err) } }() got, err := frame.ReadFrame(c2) if err != nil { fmt.Println("ReadFrame 失败:", err) return } var data map[string]any if err := got.Unmarshal(&data); err != nil { fmt.Println("Unmarshal 失败:", err) return } fmt.Printf("收到帧: %s 数据: %v\n", got.String(), data) }