{"id":13413636,"url":"https://github.com/lim-yoona/tcpack","last_synced_at":"2025-08-21T09:33:07.260Z","repository":{"id":198514194,"uuid":"700773582","full_name":"lim-yoona/tcpack","owner":"lim-yoona","description":"tcpack is an application protocol based on TCP to Pack and Unpack bytes stream in go program.","archived":false,"fork":false,"pushed_at":"2023-10-16T02:32:22.000Z","size":42,"stargazers_count":171,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-09T21:41:07.418Z","etag":null,"topics":["go","golang","golang-examples","golang-library","golang-package","tcp"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/lim-yoona/tcpack","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lim-yoona.png","metadata":{"files":{"readme":"README-CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-10-05T09:11:38.000Z","updated_at":"2025-07-25T23:39:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"98fb8098-5ad4-4ce2-a2c5-d00351693339","html_url":"https://github.com/lim-yoona/tcpack","commit_stats":null,"previous_names":["lim-yoona/msgpack","lim-yoona/tcpack"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/lim-yoona/tcpack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lim-yoona%2Ftcpack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lim-yoona%2Ftcpack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lim-yoona%2Ftcpack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lim-yoona%2Ftcpack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lim-yoona","download_url":"https://codeload.github.com/lim-yoona/tcpack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lim-yoona%2Ftcpack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271455686,"owners_count":24762774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-21T02:00:08.990Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","golang","golang-examples","golang-library","golang-package","tcp"],"created_at":"2024-07-30T20:01:45.078Z","updated_at":"2025-08-21T09:33:06.967Z","avatar_url":"https://github.com/lim-yoona.png","language":"Go","funding_links":[],"categories":["Networking","网络"],"sub_categories":["Transliteration","音译"],"readme":"# tcpack\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/lim-yoona/tcpack.svg)](https://pkg.go.dev/github.com/lim-yoona/tcpack)\n![GitHub](https://img.shields.io/github/license/lim-yoona/tcpack)\n[![Go Report](https://img.shields.io/badge/go%20report-A+-brightgreen.svg?style=flat)](https://goreportcard.com/report/github.com/lim-yoona/tcpack)\n![GitHub release (with filter)](https://img.shields.io/github/v/release/lim-yoona/tcpack)\n[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge-flat.svg)](https://github.com/avelino/awesome-go)\n\n[English](README.md) | 简体中文  \n\n[tcpack](https://pkg.go.dev/github.com/lim-yoona/tcpack) 是一个基于 TCP 的应用层协议，用于在 [go](https://go.dev/) 程序中打包和解包字节流。  \n\n## tcpack做了什么？  \n\n众所周知，TCP 是面向字节流的传输层协议，其数据传输没有明确的边界，因此应用层读取的数据可能包含多个请求而导致无法处理业务。  \n\n[tcpack](https://pkg.go.dev/github.com/lim-yoona/tcpack) 就是为了解决这个问题，将请求数据封装成消息，发送时打包，接收时解包。  \n\n*注意： 在同一个连接上使用打包器并发读写消息是不安全的，不要去这样做，会带来不可预知的后果！*  \n\n如果你想要使用在同一个TCP连接上的多个打包器并发地收发消息，请使用 [safetcpack](https://github.com/lim-yoona/tcpack/tree/main/safe/README-CN.md)。  \n\n## tcpack中有什么?  \n\n`tcpack` 提供了一个支持 Pack 和 Unpack 的打包器。  \n\n## 安装指南\n\n1. 为安装 tcpack 包, 首先你需要安装 [Go](https://go.dev/doc/install) , 然后你可以使用下面的命令将 `tcpack` 作为你Go程序的依赖。    \n\n```sh\ngo get -u github.com/lim-yoona/tcpack\n```\n\n2. 将 tcpack 导入到代码中：  \n\n```go\nimport \"github.com/lim-yoona/tcpack\"\n```\n\n## 使用\n\n```go\npackage main\n\nimport \"github.com/lim-yoona/tcpack\"\n\nfunc main() {\n    // 创建一个打包器\n    mp := tcpack.NewMsgPack(8, tcpConn)\n\n    // 打包一个消息并发送\n    msg := tcpack.NewMessage(0, uint32(len([]byte(data))), []byte(data))\n    num, err := mp.Pack(msg)\n\n    // 解包一个消息并接收\n    msg, err := mp.Unpack()\n}\n```\n\n### 支持JSON\n\n```go\ntype Person struct {\n\tName string `json:\"name\"`\n\tAge  int    `json:\"age\"`\n}\n\n// 创建一个打包器\nmp := tcpack.NewMsgPack(8, tcpConn)\n\n// data JSON Marshal\ndata := \u0026Person{\n\tName: \"jack\",\n\tAge:  20,\n}\ndataJSON, _ := json.Marshal(data)\n\n// 打包一个消息并发送\nmsgSend := tcpack.NewMessage(0, uint32(len(dataJSON)), dataJSON)\nnum, err := mp.Pack(msgSend)\n\n// 解包一个消息并接收\nmsgRsv, err := mp.Unpack()\n\n// JSON UnMarshal\nvar dataRsv Person\njson.Unmarshal(msgRsv.GetMsgData(), \u0026dataRsv)\n```\n\n## 示例\n\n这有一些 [示例](https://github.com/lim-yoona/tcpack/tree/main/example)。  \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flim-yoona%2Ftcpack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flim-yoona%2Ftcpack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flim-yoona%2Ftcpack/lists"}