freego

command module
v1.1.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2026 License: MIT Imports: 10 Imported by: 0

README ยถ

FreeGo ้ซ˜ๆ€ง่ƒฝๆก†ๆžถ

Go Version License Go Report Card

๐Ÿš€ ไธ“ๆณจไบŽๆž่‡ดๆ€ง่ƒฝไผ˜ๅŒ–ไธŽๅผบๅฎ‰ๅ…จๅ–ๅ‘็š„ Go ่ฏญ่จ€ไผไธš็บงๆก†ๆžถ๏ผˆๅธธ่ง้‡‘่žๅœบๆ™ฏๅฏๅ‚่€ƒ README_SECURITY.md๏ผ‰

FreeGo ้ขๅ‘้ซ˜ๅนถๅ‘ไธŽๅผบๅฎ‰ๅ…จๅœบๆ™ฏ๏ผŒๆ ธๅฟƒ่ƒฝๅŠ›่š็„ฆๅœจๆœๅŠกๆŽฅๅ…ฅๅฑ‚ใ€ๆ•ฐๆฎ่ฎฟ้—ฎๅฑ‚ๅŠไธ‹ๆ–‡ๅทฅ็จ‹ๅŒ–้…ๅฅ—็ป„ไปถ๏ผš

  • API ๆก†ๆžถ๏ผšๆไพ› HTTP / WebSocket / RPCX ๆŽฅๅ…ฅไธŽ่ฟ‡ๆปคๅ™จ้“พ่ƒฝๅŠ›๏ผŒๅนถๆไพ›่ฎค่ฏใ€ๆŽˆๆƒใ€ๅฎŒๆ•ดๆ€งๆ ก้ชŒๅ’Œ้˜ฒ้‡ๆ”พ่ƒฝๅŠ›๏ผ›ๅฎ‰ๅ…จๆต็จ‹ไธŽๅจ่ƒๆจกๅž‹่ง README_SECURITY.mdใ€‚
  • ORM ๆก†ๆžถ๏ผš้ขๅ‘ MySQL / Mongo ็š„ๆžไฝŽๅๅฐ„็ƒญ็‚น่ทฏๅพ„ไธŽ้ข„ๅˆ†้…ๅ‹ๅฅฝๆ•ฐๆฎ่ฎฟ้—ฎ่ƒฝๅŠ›๏ผŒๅ…ผ้กพๅžๅไธŽๅ†…ๅญ˜ๆ•ˆ็އ๏ผˆไปฅ ormx ไธบๅ‡†๏ผ‰ใ€‚

ๅŒๆ—ถๆไพ›็ผ“ๅญ˜๏ผˆๅซๆœฌๅœฐไธŽ Redis๏ผ‰ใ€ๅˆ†ๅธƒๅผ้”ไธŽ้™ๆตใ€AMQP ๆถˆๆฏใ€็ป“ๆž„ๅŒ–ๆ—ฅๅฟ—ใ€YAML ้…็ฝฎ่ฃ…่ฝฝ็ญ‰ๅทฅ็จ‹ๅŒ–้…ๅฅ—่ƒฝๅŠ›๏ผŒไพฟไบŽๅœจ็”Ÿไบง็Žฏๅขƒๆ‹ผ่ฃ…ๆœๅŠกใ€‚ๅฏนๅค– HTTPS/TLS ไธ€่ˆฌ็”ฑๅๅ‘ไปฃ็†ๆˆ–็ฝ‘ๅ…ณ็ปˆๆญข๏ผ›ๆก†ๆžถไพง้‡ๅบ”็”จๅฑ‚่ทฏ็”ฑใ€่ฟ‡ๆปคๅ™จไธŽๅฏ†็ ๅญฆ่ƒฝๅŠ›๏ผˆ็ป†ๅˆ™่งๅฎ‰ๅ…จๆ–‡ๆกฃ๏ผ‰ใ€‚

๐Ÿ“š ็›ฎๅฝ•

๐Ÿš€ ๆก†ๆžถ็‰นๆ€ง

๐ŸŒ Server & API ๆก†ๆžถ
็‰นๆ€ง ๆ่ฟฐ ไผ˜ๅŠฟ
๐Ÿš€ ้ซ˜ๆ€ง่ƒฝ HTTP ้ซ˜ๆ€ง่ƒฝ HTTP ๅผ•ๆ“Ž๏ผŒๅ…ธๅž‹ๅœบๆ™ฏๅžๅๆ˜พ่‘—้ซ˜ไบŽ net/http๏ผˆๅŒๅœบๆ™ฏๅŽ‹ๆต‹๏ผ‰ ๅ•ๆœบ QPS 50,000+๏ผˆ่ง†็กฌไปถไธŽๅŽ‹ๆต‹๏ผ‰
๐Ÿ” ๅผบๅฎ‰ๅ…จๅ–ๅ‘ JWT + Ed25519/X25519 + AES-GCM๏ผˆๅบ”็”จๅฑ‚่ฝฝ่ท๏ผ‰ ่ƒฝๅŠ›ไธŽๅธธ่ง PCI DSS ๆŽงๅˆถๆ–นๅ‘ไธ€่‡ด๏ผ›TLS ่ง้ƒจ็ฝฒไพง
๐Ÿ”’ ้˜ฒ้‡ๆ”พๆ”ปๅ‡ป HMAC-SHA256 + ๆ—ถ้—ดๆˆณ็ญ‰ ไธป้“พ่ทฏๅ†…็ฝฎ้˜ฒ้‡ๆ”พไธŽๆ—ถ้—ด็ช—๏ผˆ่งๅฎ‰ๅ…จๆ–‡ๆกฃ๏ผ‰
๐Ÿ‘ฅ RBAC ๆƒ้™ๆŽงๅˆถ ่ง’่‰ฒๆƒ้™็ฎก็†็ณป็ปŸ ไผไธš็บง่ฎฟ้—ฎๆŽงๅˆถ
โšก ไธ‰็บง้™ๆต ็ฝ‘ๅ…ณ/ๆ–นๆณ•/็”จๆˆท้™ๆต ้˜ฒๆญข็ณป็ปŸ่ฟ‡่ฝฝ
๐Ÿ”ง ่ฟ‡ๆปคๅ™จ้“พ ๅฎŒๆ•ด็š„ไธญ้—ดไปถ็ณป็ปŸ ๆ”ฏๆŒ่‡ชๅฎšไน‰ๆ‰ฉๅฑ•
๐Ÿ—„๏ธ ORM ๆ•ฐๆฎๅบ“ๆก†ๆžถ
็‰นๆ€ง ๆ่ฟฐ ๆ€ง่ƒฝๆๅ‡
๐Ÿ’พ ้›ถๅ†…ๅญ˜ๆตช่ดน ็ฒพ็กฎๅฎน้‡้ข„ๅˆ†้… ๅ‡ๅฐ‘ 90%+ GC ๅŽ‹ๅŠ›๏ผˆๅ…ธๅž‹ๆ‰น้‡ๅœบๆ™ฏ๏ผŒไปฅๅฎžๆต‹ไธบๅ‡†๏ผ‰
โšก ๆžไฝŽๅๅฐ„ๅผ€้”€ ็›ธๅฏนๅ…ธๅž‹ๅๅฐ„ๅž‹ ORM๏ผŒ็ƒญ็‚น่ทฏๅพ„ๆ›ดๅฐ‘ไพ่ต–ๅๅฐ„๏ผ›ๅ…ƒๆ•ฐๆฎ/ๆ˜ ๅฐ„็ญ‰ไปๅฏ่ƒฝไฝฟ็”จๅๅฐ„๏ผˆไปฅ ormx ไธบๅ‡†๏ผ‰ ็›ดๆŽฅ่ฃ…้… + ็ฑปๅž‹็บฆๆŸ
๐Ÿง  ๆ™บ่ƒฝ้ข„ไผฐ ้€’ๅฝ’ OR ๆกไปถ็ฒพ็กฎ่ฎก็ฎ— ๅคๆ‚ๆŸฅ่ฏขๆ€ง่ƒฝไผ˜ๅŒ–
๐Ÿ”„ ้ซ˜ๅนถๅ‘ๆ”ฏๆŒ ๆ™บ่ƒฝ่ฟžๆŽฅๆฑ  + ๅŽŸๅญๆ“ไฝœ ๆ”ฏๆŒ 10,000+ ๅนถๅ‘
ๆ ธๅฟƒ็ป„ไปถๆžถๆž„
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      FreeGo Framework                           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚              ไธ‰ๅคงๆœๅŠก็ซฏ๏ผˆHTTP ยท WebSocket ยท RPCX๏ผ‰                โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚  HTTP ยท WebSocket ยท RPCX                                  โ”‚   โ”‚
โ”‚  โ”‚  โ€ข ๅ•ๆœบ QPS: 50,000+๏ผˆHTTP ๅ…ธๅž‹ๅœบๆ™ฏ๏ผŒ่ง†็กฌไปถ๏ผ‰              โ”‚   โ”‚
โ”‚  โ”‚  โ€ข ๅ“ๅบ”ๅปถ่ฟŸ: ไบšๆฏซ็ง’็บง๏ผˆๅ…ธๅž‹ HTTP ่ทฏ็”ฑ๏ผ‰                   โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                  Filter Chain (่ฟ‡ๆปคๅ™จ้“พ)                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ ้™ๆต่ฟ‡ๆปคๅ™จ  โ”‚ ๅ‚ๆ•ฐ่ฟ‡ๆปคๅ™จ  โ”‚ ไผš่ฏ่ฟ‡ๆปคๅ™จ  โ”‚ ๆƒ้™่ฟ‡ๆปคๅ™จ  โ”‚ ่‡ชๅฎšไน‰โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                 Security & Crypto (ๅฎ‰ๅ…จๅฑ‚)                       โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ JWT/RBAC   โ”‚ Ed25519    โ”‚ X25519     โ”‚ AES-GCM    โ”‚ HMAC/้‡ๆ”พ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                Business Logic Layer (ไธšๅŠกๅฑ‚)                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ ่ฏทๆฑ‚ไธŠไธ‹ๆ–‡  โ”‚ ่ทฏ็”ฑ็ฎก็†    โ”‚ ไธญ้—ดไปถ็ฎก็†  โ”‚ ้”™่ฏฏๅค„็†    โ”‚ ็›‘ๆŽง โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                  ORM Layer (ๆ•ฐๆฎ่ฎฟ้—ฎๅฑ‚)                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚  FreeGo ORM                                              โ”‚   โ”‚
โ”‚  โ”‚  โ€ข ้›ถๅ†…ๅญ˜ๆตช่ดน โ€ข ๆžไฝŽๅๅฐ„็ƒญ็‚น โ€ข ็ฒพ็กฎๅฎน้‡้ข„ไผฐ                โ”‚   โ”‚
โ”‚  โ”‚  โ€ข ้ซ˜ๅนถๅ‘ไผ˜ๅŒ–๏ผŒๆ€ง่ƒฝๆ˜พ่‘—ๆๅ‡                                โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                 Database Layer (ๆ•ฐๆฎๅบ“ๅฑ‚)                        โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚   MySQL    โ”‚  MongoDB   โ”‚ Redis ็ผ“ๅญ˜ โ”‚ ้” / ้™ๆต  โ”‚ ๆ‰ฉๅฑ•  โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใ€ๆ€ง่ƒฝๆŒ‡ๆ ‡ๆ‘˜ๅฝ•ใ€‘๏ผˆๆฅ่‡ชไป“ๅบ“ๆŠฅๅ‘Š๏ผ›่ฏทไปฅๆœฌๆœบ `go test -bench` ไธบๅ‡†๏ผ‰
โ€ข ECC ็™ปๅฝ•่ฎค่ฏ๏ผˆ1mร—3๏ผ‰: โ‰ˆ13,725 TPS๏ผˆๅ‡ๅ€ผ๏ผ‰  โ€ข Auth๏ผˆEd25519+HMAC+AES-GCM๏ผŒ1mร—3๏ผ‰: โ‰ˆ32,318 TPS๏ผˆๅ‡ๅ€ผ๏ผ‰
โ€ข ECC: 91,738~94,001 ns/op                 โ€ข Auth: 36,388~39,015 ns/op
โ€ข MySQL FindOne: 11,169 ns/op๏ผˆFreeGo๏ผ‰ vs 16,471 ns/op๏ผˆGORM๏ผ‰
โ€ข MySQL Update: 180,680 ns/op๏ผˆFreeGo๏ผ‰ vs 358,455 ns/op๏ผˆGORM๏ผ‰
โ€ข ๅนถๅ‘่ฟžๆŽฅ: 10,000+                         โ€ข ๅคฑ่ดฅ็އ: 0.00%๏ผˆๆŠฅๅ‘Šๆ ทๆœฌๆ‰นๆฌก๏ผ‰

๐Ÿ”ง ๅฟซ้€Ÿๅผ€ๅง‹

๐Ÿ“ฆ ๅฎ‰่ฃ…
go get github.com/godaddy-x/freego
๐Ÿš€ ๅŸบ็ก€็คบไพ‹
package main

import (
    "github.com/godaddy-x/freego/node"
    "github.com/godaddy-x/freego/utils/jwt"
)

func main() {
    httpNode := &node.HttpNode{}

    // ้…็ฝฎ JWT ่ฎค่ฏ
    httpNode.AddJwtConfig(jwt.JwtConfig{
        TokenKey: "your-256-bit-secret-key",
        TokenExp: jwt.ONE_HOUR,
    })

    // ๆทปๅŠ ่ทฏ็”ฑ
    httpNode.GET("/health", func(ctx *node.Context) error {
        return ctx.Json(map[string]interface{}{"status": "ok"})
    })

    // ๅฏๅŠจๆœๅŠก
    httpNode.StartServer(":8080")
}

๐Ÿ” ๅฎ‰ๅ…จ็‰นๆ€ง

ๅคš้‡่ฎค่ฏไฝ“็ณป
  • JWT Token: ๆ— ็Šถๆ€่ฎค่ฏ๏ผŒๆ”ฏๆŒ็Ÿญ่ฟ‡ๆœŸๆ—ถ้—ด
  • HMAC-SHA256: ้˜ฒๆญข้‡ๆ”พๆ”ปๅ‡ปๅ’Œๆ•ฐๆฎ็ฏกๆ”น
  • Ed25519 / X25519: ็ญพๅไธŽๅฏ†้’ฅๅๅ•†๏ผˆๆŒ‰ Plan / ่ทฏ็”ฑๅฏ็”จ๏ผŒ่ฏฆ่ง README_SECURITY.md๏ผ‰
  • AES-GCM: ่ฎค่ฏๅŠ ๅฏ†๏ผŒๅ…ผ้กพๆœบๅฏ†ๆ€งไธŽๅฎŒๆ•ดๆ€ง๏ผˆๆŒ‰ Plan / ่ทฏ็”ฑๅฏ็”จ๏ผ‰
ๅฎ‰ๅ…จๆœบๅˆถ
  • ๆ—ถ้—ดๆˆณ้ชŒ่ฏ: ่ฏทๆฑ‚ๅœจๅ…ธๅž‹ ยฑ5 ๅˆ†้’Ÿ็ช—ๅฃๅ†…ๆœ‰ๆ•ˆ๏ผˆไปฅ่ทฏ็”ฑ/้…็ฝฎไธบๅ‡†๏ผ‰
  • ้šๆœบๆ•ฐ้˜ฒ้‡ๆ”พ: ๆฏไธช่ฏทๆฑ‚ไฝฟ็”จๅ”ฏไธ€ nonce
  • ไธšๅŠกๅฎŒๆ•ดๆ€ง: HMAC / ๅค–ๅฑ‚็ญพๅ็ญ‰ไธŽ Tokenใ€Secret ๆŒ‰้…็ฝฎ็ป„ๅˆๆ ก้ชŒ

๐Ÿ“ˆ ๆ€ง่ƒฝๅฏนๆฏ”

HTTP API ๆ€ง่ƒฝ
ๆต‹่ฏ•ๅœบๆ™ฏ ๅŽ‹ๆต‹ๅฃๅพ„ ๆฏ็ง’ๆ‰ง่กŒๆ•ฐ๏ผˆๅ‡ๅ€ผ๏ผ‰ ns/op๏ผˆ่Œƒๅ›ด๏ผ‰ B/op๏ผˆ่Œƒๅ›ด๏ผ‰ ๅคฑ่ดฅ็އ
ECC ็™ปๅฝ•่ฎค่ฏ๏ผˆEd25519 + X25519๏ผ‰ 1m ร— 3 runs โ‰ˆ 13,725/s 91,738 ~ 94,001 22,115 ~ 22,385 0.00%
Auth ่ฏทๆฑ‚๏ผˆEd25519 + HMAC + AES-GCM๏ผ‰ 1m ร— 3 runs โ‰ˆ 32,318/s 36,388 ~ 39,015 9,799 ~ 9,856 0.00%

ๅฎŒๆ•ดๆ–นๆณ•ใ€ๅŽŸๅง‹่พ“ๅ‡บไธŽๅคฑ่ดฅ็ปŸ่ฎกๅฃๅพ„่ง http_benchmark_report.mdใ€‚

ORM ๆ€ง่ƒฝๅฏนๆฏ”๏ผˆMySQL๏ผŒ็‹ฌ็ซ‹่ฟ›็จ‹ 60s๏ผ‰
ๅœบๆ™ฏ FreeGo๏ผˆsqld๏ผ‰ GORM GORM / FreeGo
FindOne ns/op 11,169 16,471 โ‰ˆ 1.47ร—
FindList 100 ns/op 165,937 253,354 โ‰ˆ 1.53ร—
FindList 500 ns/op 596,669 825,536 โ‰ˆ 1.38ร—
FindList 1000 ns/op 422,738 1,472,001 โ‰ˆ 3.48ร—
FindList 2000 ns/op 751,271 3,189,665 โ‰ˆ 4.25ร—
Save ns/op 301,592 368,179 โ‰ˆ 1.22ร—
Update ns/op 180,680 358,455 โ‰ˆ 1.98ร—

ไธŠ่กจๆฅ่‡ช orm_performance_report.md ็š„็‹ฌ็ซ‹่ฟ›็จ‹ 60s ๆ‰นๆฌก๏ผ›ๅ„ๅˆ†้กนๅคฑ่ดฅ็އๅ‡ไธบ 0.00%ใ€‚Mongo ่ง mongodb_performance_report.mdใ€‚

๐Ÿ—„๏ธ ORM ็‰นๆ€ง

ๆ ธๅฟƒไผ˜ๅŒ–ๆŠ€ๆœฏ
  • ้›ถๅ†…ๅญ˜ๆตช่ดน: ็ฒพ็กฎๅฎน้‡้ข„ๅˆ†้…๏ผŒ้ฟๅ…ๆ‰ฉๅฎน
  • ๆžไฝŽๅๅฐ„ๅผ€้”€: ็ƒญ็‚น่ทฏๅพ„ไพง้‡็›ดๆŽฅ่ฃ…้…ไธŽ้ข„ๅˆ†้…๏ผŒๅ‡ๅฐ‘ๅๅฐ„ไพ่ต–๏ผ›ๅ…ƒๆ•ฐๆฎ่งฃๆž๏ผˆไปฅ ormx ไธบๅ‡†๏ผ‰
  • ๆ™บ่ƒฝ้ข„ไผฐ: ้€’ๅฝ’ OR ๆกไปถ็ฒพ็กฎๅฎน้‡่ฎก็ฎ—
  • ้ซ˜ๅนถๅ‘ๆ”ฏๆŒ: ๅŽŸๅญๆ“ไฝœๅ’Œๆ™บ่ƒฝ่ฟžๆŽฅๆฑ 
้€‚็”จๅœบๆ™ฏ
  • ้ซ˜้ข‘ๆ•ฐๆฎๅบ“ๆ“ไฝœ
  • ๅคงๆ•ฐๆฎ้‡ๅค„็†
  • ๅ†…ๅญ˜ๆ•ๆ„Ÿๅบ”็”จ
  • ๅผบไธ€่‡ดใ€้ซ˜ๆ€ง่ƒฝๆˆ–ๆ•ฐๆฎๅฏ†้›†ๅž‹ไธšๅŠก็ณป็ปŸ

๐ŸŽฏ ้€‰ๆ‹ฉๆŒ‡ๅ—

้€‰ๆ‹ฉ FreeGo ็š„็†็”ฑ
้œ€ๆฑ‚ๅœบๆ™ฏ FreeGo ไผ˜ๅŠฟ ้€‚็”จ้กน็›ฎ
๐Ÿš€ ้ซ˜ๆ€ง่ƒฝ MySQL ๅคšๅœบๆ™ฏ ns/op ไฝŽไบŽ GORM๏ผˆ็บฆ 1.22ร—~4.25ร—๏ผ‰ ้ซ˜ๅนถๅ‘ Web ๆœๅŠก
๐Ÿ”’ ๅผบๅฎ‰ๅ…จ / ๆ”ฏไป˜ๅœบๆ™ฏ ไธŽ PCI DSS ็ญ‰ๅธธ่งๅœบๆ™ฏ็š„่ƒฝๅŠ›้€‚้…ๅ–ๅ‘ไธ€่‡ด๏ผˆ่งๅฎ‰ๅ…จๆ–‡ๆกฃ๏ผ‰ ้‡‘่žใ€ๆ”ฏไป˜็ณป็ปŸ
๐Ÿ’พ ๅ†…ๅญ˜ไผ˜ๅŒ– ๅœจ Save / Update ็ญ‰ๅ†™่ทฏๅพ„ B/opใ€allocs/op ๆ›ดไฝŽ ๅ†…ๅญ˜ๆ•ๆ„Ÿๅบ”็”จ
๐Ÿ—„๏ธ ๆ•ฐๆฎๅบ“ๅฏ†้›† ๆžไฝŽๅๅฐ„็ƒญ็‚น ORM๏ผŒๆ™บ่ƒฝๅฎน้‡้ข„ไผฐ ๆ•ฐๆฎๅฏ†้›†ๅž‹็ณป็ปŸ
ๅฟซ้€Ÿ้ƒจ็ฝฒ
# ็คบไพ‹๏ผšGo ็‰ˆๆœฌไธŽ go.mod ไธ€่‡ด๏ผ›้€‚็”จไบŽไฝ ็š„ๅบ”็”จไป“ๅบ“๏ผˆๆœฌไป“ๅบ“ไธบๅบ“ๆ—ถ้œ€่‡ชๅธฆ main ๅŒ…ๅ†ๆž„ๅปบ๏ผ‰
FROM golang:1.26-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]

๐Ÿ“ž ่”็ณปไธŽๆ”ฏๆŒ

ๆฌข่ฟŽ้€š่ฟ‡ Issues ๅ้ฆˆ้—ฎ้ข˜ไธŽๅปบ่ฎฎใ€‚

Documentation ยถ

The Go Gopher

There is no documentation for this package.

Directories ยถ

Path Synopsis
Package rabbitmq ๆไพ›RabbitMQๆถˆๆฏ้˜Ÿๅˆ—็š„Goๅฎž็Žฐ
Package rabbitmq ๆไพ›RabbitMQๆถˆๆฏ้˜Ÿๅˆ—็š„Goๅฎž็Žฐ
Package cache ๆไพ›Redis็ผ“ๅญ˜็ฎก็†ๅŠŸ่ƒฝ ๅŸบไบŽ go-redis v9 ๅบ“ๆไพ›้ซ˜ๆ€ง่ƒฝRedis็ผ“ๅญ˜ๆ“ไฝœ
Package cache ๆไพ›Redis็ผ“ๅญ˜็ฎก็†ๅŠŸ่ƒฝ ๅŸบไบŽ go-redis v9 ๅบ“ๆไพ›้ซ˜ๆ€ง่ƒฝRedis็ผ“ๅญ˜ๆ“ไฝœ
limiter
Package rate provides a rate limiter.
Package rate provides a rate limiter.
package ballast ๆไพ›ๅŸบไบŽ"ๅŽ‹่ˆฑ็Ÿณ"๏ผˆballast๏ผ‰็š„GCไผ˜ๅŒ–ๅทฅๅ…ท ้€š่ฟ‡้ข„ๅˆ†้…้•ฟๆœŸๆŒๆœ‰็š„ๅคงๅ—ๅ†…ๅญ˜๏ผŒ่ฐƒๆ•ดGoๅžƒๅœพๅ›žๆ”ถ็š„่งฆๅ‘้˜ˆๅ€ผ๏ผŒๅ‡ๅฐ‘GC้ข‘็އ ้€‚็”จไบŽๅ†…ๅญ˜ไฝฟ็”จ้ข‘็นๆณขๅŠจ็š„ๆœๅŠก๏ผŒ้œ€ๆ นๆฎๅฎž้™…ๅ†…ๅญ˜้œ€ๆฑ‚ๅˆ็†้…็ฝฎ
package ballast ๆไพ›ๅŸบไบŽ"ๅŽ‹่ˆฑ็Ÿณ"๏ผˆballast๏ผ‰็š„GCไผ˜ๅŒ–ๅทฅๅ…ท ้€š่ฟ‡้ข„ๅˆ†้…้•ฟๆœŸๆŒๆœ‰็š„ๅคงๅ—ๅ†…ๅญ˜๏ผŒ่ฐƒๆ•ดGoๅžƒๅœพๅ›žๆ”ถ็š„่งฆๅ‘้˜ˆๅ€ผ๏ผŒๅ‡ๅฐ‘GC้ข‘็އ ้€‚็”จไบŽๅ†…ๅญ˜ไฝฟ็”จ้ข‘็นๆณขๅŠจ็š„ๆœๅŠก๏ผŒ้œ€ๆ นๆฎๅฎž้™…ๅ†…ๅญ˜้œ€ๆฑ‚ๅˆ็†้…็ฝฎ
sdk
Package goquery implements features similar to jQuery, including the chainable syntax, to manipulate and query an HTML document.
Package goquery implements features similar to jQuery, including the chainable syntax, to manipulate and query an HTML document.
ormx
impl
Package impl ๅฎž็Žฐ gRPC CommonWorker๏ผšP=0 ๆ˜Žๆ–‡๏ผ›s=SHA256(่ง„่Œƒๅญ—ๆฎต)๏ผ›e=Ed25519.Sign(SHA256(่ง„่Œƒๅญ—ๆฎต))๏ผ›Cipher ไธบ *crypto.Ed25519Objectใ€‚
Package impl ๅฎž็Žฐ gRPC CommonWorker๏ผšP=0 ๆ˜Žๆ–‡๏ผ›s=SHA256(่ง„่Œƒๅญ—ๆฎต)๏ผ›e=Ed25519.Sign(SHA256(่ง„่Œƒๅญ—ๆฎต))๏ผ›Cipher ไธบ *crypto.Ed25519Objectใ€‚
pb
crypto
Ed25519 / X25519๏ผˆCurve25519๏ผ‰ๅฐ่ฃ…๏ผŒไพ่ต– github.com/godaddy-x/eccryptoใ€‚
Ed25519 / X25519๏ผˆCurve25519๏ผ‰ๅฐ่ฃ…๏ผŒไพ่ต– github.com/godaddy-x/eccryptoใ€‚
decimal
Package decimal implements an arbitrary precision fixed-point decimal.
Package decimal implements an arbitrary precision fixed-point decimal.
jwt
sdk
snowflake
Package snowflake provides a very simple Twitter snowflake generator and parser.
Package snowflake provides a very simple Twitter snowflake generator and parser.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL