oh-my-customcode 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/README.md +45 -32
  2. package/dist/cli/index.js +12 -20
  3. package/dist/index.js +3 -3
  4. package/package.json +2 -2
  5. package/templates/.claude/rules/MUST-orchestrator-coordination.md +25 -0
  6. package/templates/agents/index.yaml +6 -0
  7. package/templates/agents/infra-engineer/aws-expert/refs/aws/common-patterns.md +169 -0
  8. package/templates/agents/infra-engineer/aws-expert/refs/aws/index.yaml +26 -0
  9. package/templates/agents/infra-engineer/aws-expert/refs/aws/well-architected.md +143 -0
  10. package/templates/agents/infra-engineer/aws-expert/refs/aws-best-practices/SKILL.md +279 -0
  11. package/templates/agents/infra-engineer/aws-expert/refs/aws-best-practices/index.yaml +27 -0
  12. package/templates/agents/infra-engineer/docker-expert/refs/docker/compose-best-practices.md +284 -0
  13. package/templates/agents/infra-engineer/docker-expert/refs/docker/dockerfile-best-practices.md +262 -0
  14. package/templates/agents/infra-engineer/docker-expert/refs/docker/index.yaml +26 -0
  15. package/templates/agents/infra-engineer/docker-expert/refs/docker-best-practices/SKILL.md +274 -0
  16. package/templates/agents/infra-engineer/docker-expert/refs/docker-best-practices/index.yaml +26 -0
  17. package/templates/agents/manager/creator/refs/rules/MAY-optimization.md +93 -0
  18. package/templates/agents/manager/creator/refs/rules/MUST-agent-design.md +107 -0
  19. package/templates/agents/manager/creator/refs/rules/MUST-agent-identification.md +108 -0
  20. package/templates/agents/manager/creator/refs/rules/MUST-continuous-improvement.md +132 -0
  21. package/templates/agents/manager/creator/refs/rules/MUST-intent-transparency.md +199 -0
  22. package/templates/agents/manager/creator/refs/rules/MUST-language-policy.md +62 -0
  23. package/templates/agents/manager/creator/refs/rules/MUST-orchestrator-coordination.md +291 -0
  24. package/templates/agents/manager/creator/refs/rules/MUST-parallel-execution.md +341 -0
  25. package/templates/agents/manager/creator/refs/rules/MUST-permissions.md +84 -0
  26. package/templates/agents/manager/creator/refs/rules/MUST-safety.md +69 -0
  27. package/templates/agents/manager/creator/refs/rules/MUST-sync-verification.md +219 -0
  28. package/templates/agents/manager/creator/refs/rules/MUST-tool-identification.md +112 -0
  29. package/templates/agents/manager/creator/refs/rules/SHOULD-ecomode.md +145 -0
  30. package/templates/agents/manager/creator/refs/rules/SHOULD-error-handling.md +102 -0
  31. package/templates/agents/manager/creator/refs/rules/SHOULD-hud-statusline.md +89 -0
  32. package/templates/agents/manager/creator/refs/rules/SHOULD-interaction.md +103 -0
  33. package/templates/agents/manager/creator/refs/rules/SHOULD-memory-integration.md +114 -0
  34. package/templates/agents/manager/creator/refs/rules/SHOULD-pipeline-mode.md +165 -0
  35. package/templates/agents/manager/creator/refs/rules/index.yaml +125 -0
  36. package/templates/agents/manager/supplier/refs/guides/aws/common-patterns.md +169 -0
  37. package/templates/agents/manager/supplier/refs/guides/aws/index.yaml +26 -0
  38. package/templates/agents/manager/supplier/refs/guides/aws/well-architected.md +143 -0
  39. package/templates/agents/manager/supplier/refs/guides/claude-code/01-overview.md +42 -0
  40. package/templates/agents/manager/supplier/refs/guides/claude-code/03-tools.md +107 -0
  41. package/templates/agents/manager/supplier/refs/guides/claude-code/04-agent-skills.md +90 -0
  42. package/templates/agents/manager/supplier/refs/guides/claude-code/05-agent-sdk.md +129 -0
  43. package/templates/agents/manager/supplier/refs/guides/claude-code/06-mcp.md +165 -0
  44. package/templates/agents/manager/supplier/refs/guides/claude-code/07-prompt-engineering.md +100 -0
  45. package/templates/agents/manager/supplier/refs/guides/claude-code/08-testing.md +58 -0
  46. package/templates/agents/manager/supplier/refs/guides/claude-code/09-guardrails.md +80 -0
  47. package/templates/agents/manager/supplier/refs/guides/claude-code/10-monitoring.md +89 -0
  48. package/templates/agents/manager/supplier/refs/guides/claude-code/index.yaml +51 -0
  49. package/templates/agents/manager/supplier/refs/guides/docker/compose-best-practices.md +284 -0
  50. package/templates/agents/manager/supplier/refs/guides/docker/dockerfile-best-practices.md +262 -0
  51. package/templates/agents/manager/supplier/refs/guides/docker/index.yaml +26 -0
  52. package/templates/agents/manager/supplier/refs/guides/fastapi/best-practices.md +232 -0
  53. package/templates/agents/manager/supplier/refs/guides/fastapi/index.yaml +21 -0
  54. package/templates/agents/manager/supplier/refs/guides/go-backend/index.yaml +26 -0
  55. package/templates/agents/manager/supplier/refs/guides/go-backend/project-layout.md +243 -0
  56. package/templates/agents/manager/supplier/refs/guides/go-backend/uber-style.md +212 -0
  57. package/templates/agents/manager/supplier/refs/guides/golang/concurrency.md +282 -0
  58. package/templates/agents/manager/supplier/refs/guides/golang/effective-go.md +309 -0
  59. package/templates/agents/manager/supplier/refs/guides/golang/error-handling.md +250 -0
  60. package/templates/agents/manager/supplier/refs/guides/golang/index.yaml +27 -0
  61. package/templates/agents/manager/supplier/refs/guides/index.yaml +101 -0
  62. package/templates/agents/manager/supplier/refs/guides/kotlin/coding-conventions.md +247 -0
  63. package/templates/agents/manager/supplier/refs/guides/kotlin/idioms.md +234 -0
  64. package/templates/agents/manager/supplier/refs/guides/kotlin/index.yaml +26 -0
  65. package/templates/agents/manager/supplier/refs/guides/python/index.yaml +26 -0
  66. package/templates/agents/manager/supplier/refs/guides/python/pep8-style-guide.md +202 -0
  67. package/templates/agents/manager/supplier/refs/guides/python/zen-of-python.md +79 -0
  68. package/templates/agents/manager/supplier/refs/guides/rust/error-handling.md +262 -0
  69. package/templates/agents/manager/supplier/refs/guides/rust/index.yaml +26 -0
  70. package/templates/agents/manager/supplier/refs/guides/rust/ownership.md +180 -0
  71. package/templates/agents/manager/supplier/refs/guides/springboot/best-practices.md +361 -0
  72. package/templates/agents/manager/supplier/refs/guides/springboot/index.yaml +22 -0
  73. package/templates/agents/manager/supplier/refs/guides/typescript/advanced-types.md +225 -0
  74. package/templates/agents/manager/supplier/refs/guides/typescript/index.yaml +26 -0
  75. package/templates/agents/manager/supplier/refs/guides/typescript/type-system.md +219 -0
  76. package/templates/agents/manager/supplier/refs/guides/web-design/accessibility.md +66 -0
  77. package/templates/agents/manager/supplier/refs/guides/web-design/index.yaml +20 -0
  78. package/templates/agents/manager/supplier/refs/guides/web-design/performance.md +102 -0
  79. package/templates/agents/manager/supplier/refs/rules/MAY-optimization.md +93 -0
  80. package/templates/agents/manager/supplier/refs/rules/MUST-agent-design.md +107 -0
  81. package/templates/agents/manager/supplier/refs/rules/MUST-agent-identification.md +108 -0
  82. package/templates/agents/manager/supplier/refs/rules/MUST-continuous-improvement.md +132 -0
  83. package/templates/agents/manager/supplier/refs/rules/MUST-intent-transparency.md +199 -0
  84. package/templates/agents/manager/supplier/refs/rules/MUST-language-policy.md +62 -0
  85. package/templates/agents/manager/supplier/refs/rules/MUST-orchestrator-coordination.md +291 -0
  86. package/templates/agents/manager/supplier/refs/rules/MUST-parallel-execution.md +341 -0
  87. package/templates/agents/manager/supplier/refs/rules/MUST-permissions.md +84 -0
  88. package/templates/agents/manager/supplier/refs/rules/MUST-safety.md +69 -0
  89. package/templates/agents/manager/supplier/refs/rules/MUST-sync-verification.md +219 -0
  90. package/templates/agents/manager/supplier/refs/rules/MUST-tool-identification.md +112 -0
  91. package/templates/agents/manager/supplier/refs/rules/SHOULD-ecomode.md +145 -0
  92. package/templates/agents/manager/supplier/refs/rules/SHOULD-error-handling.md +102 -0
  93. package/templates/agents/manager/supplier/refs/rules/SHOULD-hud-statusline.md +89 -0
  94. package/templates/agents/manager/supplier/refs/rules/SHOULD-interaction.md +103 -0
  95. package/templates/agents/manager/supplier/refs/rules/SHOULD-memory-integration.md +114 -0
  96. package/templates/agents/manager/supplier/refs/rules/SHOULD-pipeline-mode.md +165 -0
  97. package/templates/agents/manager/supplier/refs/rules/index.yaml +125 -0
  98. package/templates/agents/manager/supplier/refs/skills/backend/fastapi-best-practices/SKILL.md +269 -0
  99. package/templates/agents/manager/supplier/refs/skills/backend/fastapi-best-practices/index.yaml +25 -0
  100. package/templates/agents/manager/supplier/refs/skills/backend/go-backend-best-practices/SKILL.md +337 -0
  101. package/templates/agents/manager/supplier/refs/skills/backend/go-backend-best-practices/index.yaml +26 -0
  102. package/templates/agents/manager/supplier/refs/skills/backend/springboot-best-practices/SKILL.md +356 -0
  103. package/templates/agents/manager/supplier/refs/skills/backend/springboot-best-practices/index.yaml +27 -0
  104. package/templates/agents/manager/supplier/refs/skills/development/go-best-practices/SKILL.md +202 -0
  105. package/templates/agents/manager/supplier/refs/skills/development/go-best-practices/index.yaml +25 -0
  106. package/templates/agents/manager/supplier/refs/skills/development/kotlin-best-practices/SKILL.md +255 -0
  107. package/templates/agents/manager/supplier/refs/skills/development/kotlin-best-practices/index.yaml +27 -0
  108. package/templates/agents/manager/supplier/refs/skills/development/python-best-practices/SKILL.md +221 -0
  109. package/templates/agents/manager/supplier/refs/skills/development/python-best-practices/index.yaml +25 -0
  110. package/templates/agents/manager/supplier/refs/skills/development/react-best-practices/SKILL.md +100 -0
  111. package/templates/agents/manager/supplier/refs/skills/development/react-best-practices/index.yaml +39 -0
  112. package/templates/agents/manager/supplier/refs/skills/development/rust-best-practices/SKILL.md +266 -0
  113. package/templates/agents/manager/supplier/refs/skills/development/rust-best-practices/index.yaml +26 -0
  114. package/templates/agents/manager/supplier/refs/skills/development/typescript-best-practices/SKILL.md +320 -0
  115. package/templates/agents/manager/supplier/refs/skills/development/typescript-best-practices/index.yaml +28 -0
  116. package/templates/agents/manager/supplier/refs/skills/development/vercel-deploy/SKILL.md +73 -0
  117. package/templates/agents/manager/supplier/refs/skills/development/vercel-deploy/index.yaml +30 -0
  118. package/templates/agents/manager/supplier/refs/skills/development/web-design-guidelines/SKILL.md +117 -0
  119. package/templates/agents/manager/supplier/refs/skills/development/web-design-guidelines/index.yaml +34 -0
  120. package/templates/agents/manager/supplier/refs/skills/index.yaml +129 -0
  121. package/templates/agents/manager/supplier/refs/skills/infrastructure/aws-best-practices/SKILL.md +279 -0
  122. package/templates/agents/manager/supplier/refs/skills/infrastructure/aws-best-practices/index.yaml +27 -0
  123. package/templates/agents/manager/supplier/refs/skills/infrastructure/docker-best-practices/SKILL.md +274 -0
  124. package/templates/agents/manager/supplier/refs/skills/infrastructure/docker-best-practices/index.yaml +26 -0
  125. package/templates/agents/manager/supplier/refs/skills/orchestration/intent-detection/SKILL.md +214 -0
  126. package/templates/agents/manager/supplier/refs/skills/orchestration/intent-detection/index.yaml +30 -0
  127. package/templates/agents/manager/supplier/refs/skills/orchestration/intent-detection/patterns/agent-triggers.yaml +342 -0
  128. package/templates/agents/manager/supplier/refs/skills/orchestration/pipeline-execution/SKILL.md +188 -0
  129. package/templates/agents/manager/supplier/refs/skills/orchestration/pipeline-execution/index.yaml +27 -0
  130. package/templates/agents/manager/supplier/refs/skills/system/memory-management/SKILL.md +194 -0
  131. package/templates/agents/manager/supplier/refs/skills/system/memory-management/index.yaml +30 -0
  132. package/templates/agents/manager/supplier/refs/skills/system/result-aggregation/SKILL.md +163 -0
  133. package/templates/agents/manager/supplier/refs/skills/system/result-aggregation/index.yaml +36 -0
  134. package/templates/agents/manager/updater/refs/rules/MAY-optimization.md +93 -0
  135. package/templates/agents/manager/updater/refs/rules/MUST-agent-design.md +107 -0
  136. package/templates/agents/manager/updater/refs/rules/MUST-agent-identification.md +108 -0
  137. package/templates/agents/manager/updater/refs/rules/MUST-continuous-improvement.md +132 -0
  138. package/templates/agents/manager/updater/refs/rules/MUST-intent-transparency.md +199 -0
  139. package/templates/agents/manager/updater/refs/rules/MUST-language-policy.md +62 -0
  140. package/templates/agents/manager/updater/refs/rules/MUST-orchestrator-coordination.md +291 -0
  141. package/templates/agents/manager/updater/refs/rules/MUST-parallel-execution.md +341 -0
  142. package/templates/agents/manager/updater/refs/rules/MUST-permissions.md +84 -0
  143. package/templates/agents/manager/updater/refs/rules/MUST-safety.md +69 -0
  144. package/templates/agents/manager/updater/refs/rules/MUST-sync-verification.md +219 -0
  145. package/templates/agents/manager/updater/refs/rules/MUST-tool-identification.md +112 -0
  146. package/templates/agents/manager/updater/refs/rules/SHOULD-ecomode.md +145 -0
  147. package/templates/agents/manager/updater/refs/rules/SHOULD-error-handling.md +102 -0
  148. package/templates/agents/manager/updater/refs/rules/SHOULD-hud-statusline.md +89 -0
  149. package/templates/agents/manager/updater/refs/rules/SHOULD-interaction.md +103 -0
  150. package/templates/agents/manager/updater/refs/rules/SHOULD-memory-integration.md +114 -0
  151. package/templates/agents/manager/updater/refs/rules/SHOULD-pipeline-mode.md +165 -0
  152. package/templates/agents/manager/updater/refs/rules/index.yaml +125 -0
  153. package/templates/agents/orchestrator/secretary/refs/rules/MAY-optimization.md +93 -0
  154. package/templates/agents/orchestrator/secretary/refs/rules/MUST-agent-design.md +107 -0
  155. package/templates/agents/orchestrator/secretary/refs/rules/MUST-agent-identification.md +108 -0
  156. package/templates/agents/orchestrator/secretary/refs/rules/MUST-continuous-improvement.md +132 -0
  157. package/templates/agents/orchestrator/secretary/refs/rules/MUST-intent-transparency.md +199 -0
  158. package/templates/agents/orchestrator/secretary/refs/rules/MUST-language-policy.md +62 -0
  159. package/templates/agents/orchestrator/secretary/refs/rules/MUST-orchestrator-coordination.md +291 -0
  160. package/templates/agents/orchestrator/secretary/refs/rules/MUST-parallel-execution.md +341 -0
  161. package/templates/agents/orchestrator/secretary/refs/rules/MUST-permissions.md +84 -0
  162. package/templates/agents/orchestrator/secretary/refs/rules/MUST-safety.md +69 -0
  163. package/templates/agents/orchestrator/secretary/refs/rules/MUST-sync-verification.md +219 -0
  164. package/templates/agents/orchestrator/secretary/refs/rules/MUST-tool-identification.md +112 -0
  165. package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-ecomode.md +145 -0
  166. package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-error-handling.md +102 -0
  167. package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-hud-statusline.md +89 -0
  168. package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-interaction.md +103 -0
  169. package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-memory-integration.md +114 -0
  170. package/templates/agents/orchestrator/secretary/refs/rules/SHOULD-pipeline-mode.md +165 -0
  171. package/templates/agents/orchestrator/secretary/refs/rules/index.yaml +125 -0
  172. package/templates/agents/sw-engineer/backend/fastapi-expert/refs/fastapi/best-practices.md +232 -0
  173. package/templates/agents/sw-engineer/backend/fastapi-expert/refs/fastapi/index.yaml +21 -0
  174. package/templates/agents/sw-engineer/backend/fastapi-expert/refs/fastapi-best-practices/SKILL.md +269 -0
  175. package/templates/agents/sw-engineer/backend/fastapi-expert/refs/fastapi-best-practices/index.yaml +25 -0
  176. package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend/index.yaml +26 -0
  177. package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend/project-layout.md +243 -0
  178. package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend/uber-style.md +212 -0
  179. package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend-best-practices/SKILL.md +337 -0
  180. package/templates/agents/sw-engineer/backend/go-backend-expert/refs/go-backend-best-practices/index.yaml +26 -0
  181. package/templates/agents/sw-engineer/backend/springboot-expert/refs/springboot/best-practices.md +361 -0
  182. package/templates/agents/sw-engineer/backend/springboot-expert/refs/springboot/index.yaml +22 -0
  183. package/templates/agents/sw-engineer/backend/springboot-expert/refs/springboot-best-practices/SKILL.md +356 -0
  184. package/templates/agents/sw-engineer/backend/springboot-expert/refs/springboot-best-practices/index.yaml +27 -0
  185. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/react-best-practices/SKILL.md +100 -0
  186. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/react-best-practices/index.yaml +39 -0
  187. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/vercel-deploy/SKILL.md +73 -0
  188. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/vercel-deploy/index.yaml +30 -0
  189. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design/accessibility.md +66 -0
  190. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design/index.yaml +20 -0
  191. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design/performance.md +102 -0
  192. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design-guidelines/SKILL.md +117 -0
  193. package/templates/agents/sw-engineer/frontend/vercel-agent/refs/web-design-guidelines/index.yaml +34 -0
  194. package/templates/agents/sw-engineer/language/golang-expert/refs/go-best-practices/SKILL.md +202 -0
  195. package/templates/agents/sw-engineer/language/golang-expert/refs/go-best-practices/index.yaml +25 -0
  196. package/templates/agents/sw-engineer/language/golang-expert/refs/golang/concurrency.md +282 -0
  197. package/templates/agents/sw-engineer/language/golang-expert/refs/golang/effective-go.md +309 -0
  198. package/templates/agents/sw-engineer/language/golang-expert/refs/golang/error-handling.md +250 -0
  199. package/templates/agents/sw-engineer/language/golang-expert/refs/golang/index.yaml +27 -0
  200. package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin/coding-conventions.md +247 -0
  201. package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin/idioms.md +234 -0
  202. package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin/index.yaml +26 -0
  203. package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin-best-practices/SKILL.md +255 -0
  204. package/templates/agents/sw-engineer/language/kotlin-expert/refs/kotlin-best-practices/index.yaml +27 -0
  205. package/templates/agents/sw-engineer/language/python-expert/refs/python/index.yaml +26 -0
  206. package/templates/agents/sw-engineer/language/python-expert/refs/python/pep8-style-guide.md +202 -0
  207. package/templates/agents/sw-engineer/language/python-expert/refs/python/zen-of-python.md +79 -0
  208. package/templates/agents/sw-engineer/language/python-expert/refs/python-best-practices/SKILL.md +221 -0
  209. package/templates/agents/sw-engineer/language/python-expert/refs/python-best-practices/index.yaml +25 -0
  210. package/templates/agents/sw-engineer/language/rust-expert/refs/rust/error-handling.md +262 -0
  211. package/templates/agents/sw-engineer/language/rust-expert/refs/rust/index.yaml +26 -0
  212. package/templates/agents/sw-engineer/language/rust-expert/refs/rust/ownership.md +180 -0
  213. package/templates/agents/sw-engineer/language/rust-expert/refs/rust-best-practices/SKILL.md +266 -0
  214. package/templates/agents/sw-engineer/language/rust-expert/refs/rust-best-practices/index.yaml +26 -0
  215. package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript/advanced-types.md +225 -0
  216. package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript/index.yaml +26 -0
  217. package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript/type-system.md +219 -0
  218. package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript-best-practices/SKILL.md +320 -0
  219. package/templates/agents/sw-engineer/language/typescript-expert/refs/typescript-best-practices/index.yaml +28 -0
  220. package/templates/agents/tutor/go-tutor/AGENT.md +130 -0
  221. package/templates/agents/tutor/go-tutor/index.yaml +48 -0
  222. package/templates/manifest.json +55 -0
  223. package/templates/skills/orchestration/intent-detection/patterns/agent-triggers.yaml +9 -0
@@ -0,0 +1,243 @@
1
+ # Standard Go Project Layout
2
+
3
+ > Source: https://github.com/golang-standards/project-layout
4
+
5
+ ## Directory Structure
6
+
7
+ ```
8
+ project/
9
+ ├── cmd/ # Main applications
10
+ │ ├── server/
11
+ │ │ └── main.go
12
+ │ └── worker/
13
+ │ └── main.go
14
+ ├── internal/ # Private code
15
+ │ ├── handler/
16
+ │ ├── service/
17
+ │ ├── repository/
18
+ │ ├── model/
19
+ │ └── config/
20
+ ├── pkg/ # Public library code
21
+ │ └── validator/
22
+ ├── api/ # API definitions
23
+ │ ├── openapi.yaml
24
+ │ └── proto/
25
+ ├── configs/ # Configuration files
26
+ │ └── config.yaml
27
+ ├── scripts/ # Build scripts
28
+ │ └── build.sh
29
+ ├── test/ # Additional test data
30
+ │ └── testdata/
31
+ ├── docs/ # Documentation
32
+ ├── Dockerfile
33
+ ├── Makefile
34
+ ├── go.mod
35
+ └── go.sum
36
+ ```
37
+
38
+ ## Directory Descriptions
39
+
40
+ ### `/cmd`
41
+
42
+ Main applications for this project. Each application has its own subdirectory.
43
+
44
+ ```go
45
+ // cmd/server/main.go
46
+ package main
47
+
48
+ import (
49
+ "log"
50
+ "myapp/internal/config"
51
+ "myapp/internal/handler"
52
+ "myapp/internal/service"
53
+ )
54
+
55
+ func main() {
56
+ cfg, err := config.Load()
57
+ if err != nil {
58
+ log.Fatal(err)
59
+ }
60
+
61
+ svc := service.New(cfg)
62
+ h := handler.New(svc)
63
+
64
+ log.Fatal(h.ListenAndServe(cfg.Addr))
65
+ }
66
+ ```
67
+
68
+ ### `/internal`
69
+
70
+ Private application and library code. Not importable by other projects.
71
+
72
+ ```
73
+ internal/
74
+ ├── handler/ # HTTP/gRPC handlers
75
+ │ └── user.go
76
+ ├── service/ # Business logic
77
+ │ └── user.go
78
+ ├── repository/ # Data access
79
+ │ └── user.go
80
+ ├── model/ # Domain models
81
+ │ └── user.go
82
+ └── config/ # Configuration
83
+ └── config.go
84
+ ```
85
+
86
+ ### `/pkg`
87
+
88
+ Library code safe for external use.
89
+
90
+ ```go
91
+ // pkg/validator/validator.go
92
+ package validator
93
+
94
+ func ValidateEmail(email string) bool {
95
+ // validation logic
96
+ }
97
+ ```
98
+
99
+ ### `/api`
100
+
101
+ API definitions (OpenAPI/Swagger, Protocol Buffers).
102
+
103
+ ```yaml
104
+ # api/openapi.yaml
105
+ openapi: "3.0.0"
106
+ info:
107
+ title: "My API"
108
+ version: "1.0.0"
109
+ paths:
110
+ /users:
111
+ get:
112
+ summary: "List users"
113
+ ```
114
+
115
+ ## Common Patterns
116
+
117
+ ### Application Structure
118
+
119
+ ```go
120
+ // internal/app/app.go
121
+ type App struct {
122
+ config *config.Config
123
+ db *sql.DB
124
+ cache *redis.Client
125
+ handler *handler.Handler
126
+ }
127
+
128
+ func New(cfg *config.Config) (*App, error) {
129
+ db, err := sql.Open("postgres", cfg.DatabaseURL)
130
+ if err != nil {
131
+ return nil, fmt.Errorf("open db: %w", err)
132
+ }
133
+
134
+ cache := redis.NewClient(&redis.Options{
135
+ Addr: cfg.RedisURL,
136
+ })
137
+
138
+ repo := repository.New(db)
139
+ svc := service.New(repo, cache)
140
+ h := handler.New(svc)
141
+
142
+ return &App{
143
+ config: cfg,
144
+ db: db,
145
+ cache: cache,
146
+ handler: h,
147
+ }, nil
148
+ }
149
+
150
+ func (a *App) Run() error {
151
+ return http.ListenAndServe(a.config.Addr, a.handler.Router())
152
+ }
153
+
154
+ func (a *App) Shutdown(ctx context.Context) error {
155
+ if err := a.db.Close(); err != nil {
156
+ return err
157
+ }
158
+ return a.cache.Close()
159
+ }
160
+ ```
161
+
162
+ ### Main Entry Point
163
+
164
+ ```go
165
+ // cmd/server/main.go
166
+ package main
167
+
168
+ import (
169
+ "context"
170
+ "log/slog"
171
+ "os"
172
+ "os/signal"
173
+ "syscall"
174
+
175
+ "myapp/internal/app"
176
+ "myapp/internal/config"
177
+ )
178
+
179
+ func main() {
180
+ logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
181
+ slog.SetDefault(logger)
182
+
183
+ cfg, err := config.Load()
184
+ if err != nil {
185
+ slog.Error("load config", "error", err)
186
+ os.Exit(1)
187
+ }
188
+
189
+ application, err := app.New(cfg)
190
+ if err != nil {
191
+ slog.Error("create app", "error", err)
192
+ os.Exit(1)
193
+ }
194
+
195
+ // Graceful shutdown
196
+ ctx, stop := signal.NotifyContext(
197
+ context.Background(),
198
+ syscall.SIGINT, syscall.SIGTERM,
199
+ )
200
+ defer stop()
201
+
202
+ go func() {
203
+ slog.Info("starting server", "addr", cfg.Addr)
204
+ if err := application.Run(); err != nil {
205
+ slog.Error("server error", "error", err)
206
+ }
207
+ }()
208
+
209
+ <-ctx.Done()
210
+ slog.Info("shutting down")
211
+
212
+ shutdownCtx, cancel := context.WithTimeout(
213
+ context.Background(),
214
+ 30*time.Second,
215
+ )
216
+ defer cancel()
217
+
218
+ if err := application.Shutdown(shutdownCtx); err != nil {
219
+ slog.Error("shutdown error", "error", err)
220
+ }
221
+ }
222
+ ```
223
+
224
+ ### Makefile
225
+
226
+ ```makefile
227
+ .PHONY: build run test lint
228
+
229
+ build:
230
+ go build -o bin/server ./cmd/server
231
+
232
+ run:
233
+ go run ./cmd/server
234
+
235
+ test:
236
+ go test -v -race ./...
237
+
238
+ lint:
239
+ golangci-lint run
240
+
241
+ docker:
242
+ docker build -t myapp .
243
+ ```
@@ -0,0 +1,212 @@
1
+ # Uber Go Style Guide
2
+
3
+ > Source: https://github.com/uber-go/guide/blob/master/style.md
4
+
5
+ ## Guidelines
6
+
7
+ ### Verify Interface Compliance
8
+
9
+ ```go
10
+ // Compile-time check
11
+ var _ http.Handler = (*Handler)(nil)
12
+ var _ io.Reader = (*MyReader)(nil)
13
+ ```
14
+
15
+ ### Receiver Type
16
+
17
+ ```go
18
+ // Value receiver: doesn't modify state
19
+ func (s Stack) Length() int {
20
+ return len(s.items)
21
+ }
22
+
23
+ // Pointer receiver: modifies state or is large
24
+ func (s *Stack) Push(item int) {
25
+ s.items = append(s.items, item)
26
+ }
27
+ ```
28
+
29
+ ### Zero-value Mutexes
30
+
31
+ ```go
32
+ // Good: zero-value is valid
33
+ var mu sync.Mutex
34
+
35
+ // Good: embedded in struct
36
+ type Store struct {
37
+ mu sync.Mutex
38
+ items map[string]Item
39
+ }
40
+ ```
41
+
42
+ ### Copy Slices and Maps
43
+
44
+ ```go
45
+ // Returning: copy to prevent external modification
46
+ func (s *Store) GetItems() []Item {
47
+ s.mu.RLock()
48
+ defer s.mu.RUnlock()
49
+ items := make([]Item, len(s.items))
50
+ copy(items, s.items)
51
+ return items
52
+ }
53
+
54
+ // Receiving: copy to prevent caller modification
55
+ func (s *Store) SetItems(items []Item) {
56
+ s.mu.Lock()
57
+ defer s.mu.Unlock()
58
+ s.items = make([]Item, len(items))
59
+ copy(s.items, items)
60
+ }
61
+ ```
62
+
63
+ ### Defer for Cleanup
64
+
65
+ ```go
66
+ func readFile(path string) ([]byte, error) {
67
+ f, err := os.Open(path)
68
+ if err != nil {
69
+ return nil, err
70
+ }
71
+ defer f.Close()
72
+ return io.ReadAll(f)
73
+ }
74
+
75
+ func process() {
76
+ mu.Lock()
77
+ defer mu.Unlock()
78
+ // ...
79
+ }
80
+ ```
81
+
82
+ ### Channel Size
83
+
84
+ ```go
85
+ // Good: unbuffered or 1
86
+ ch := make(chan int)
87
+ ch := make(chan int, 1)
88
+
89
+ // Requires justification
90
+ ch := make(chan int, 100) // Why 100?
91
+ ```
92
+
93
+ ### Start Enums at One
94
+
95
+ ```go
96
+ type Operation int
97
+
98
+ const (
99
+ Add Operation = iota + 1
100
+ Subtract
101
+ Multiply
102
+ )
103
+ ```
104
+
105
+ ### Error Types
106
+
107
+ ```go
108
+ // Sentinel errors
109
+ var ErrNotFound = errors.New("not found")
110
+
111
+ // Error wrapping
112
+ if err != nil {
113
+ return fmt.Errorf("failed to get user: %w", err)
114
+ }
115
+
116
+ // Checking errors
117
+ if errors.Is(err, ErrNotFound) {
118
+ // handle not found
119
+ }
120
+ ```
121
+
122
+ ### Handle Errors Once
123
+
124
+ ```go
125
+ // Bad: logs AND returns
126
+ if err != nil {
127
+ log.Printf("error: %v", err)
128
+ return err
129
+ }
130
+
131
+ // Good: return with context
132
+ if err != nil {
133
+ return fmt.Errorf("process: %w", err)
134
+ }
135
+ ```
136
+
137
+ ### Use strconv Over fmt
138
+
139
+ ```go
140
+ // Good
141
+ s := strconv.Itoa(n)
142
+ n, err := strconv.Atoi(s)
143
+
144
+ // Slower
145
+ s := fmt.Sprintf("%d", n)
146
+ ```
147
+
148
+ ### Table-Driven Tests
149
+
150
+ ```go
151
+ func TestSplit(t *testing.T) {
152
+ tests := []struct {
153
+ name string
154
+ input string
155
+ sep string
156
+ want []string
157
+ }{
158
+ {
159
+ name: "simple",
160
+ input: "a/b/c",
161
+ sep: "/",
162
+ want: []string{"a", "b", "c"},
163
+ },
164
+ {
165
+ name: "empty",
166
+ input: "",
167
+ sep: "/",
168
+ want: []string{""},
169
+ },
170
+ }
171
+
172
+ for _, tt := range tests {
173
+ t.Run(tt.name, func(t *testing.T) {
174
+ got := strings.Split(tt.input, tt.sep)
175
+ if diff := cmp.Diff(tt.want, got); diff != "" {
176
+ t.Errorf("mismatch (-want +got):\n%s", diff)
177
+ }
178
+ })
179
+ }
180
+ }
181
+ ```
182
+
183
+ ### Functional Options
184
+
185
+ ```go
186
+ type Server struct {
187
+ addr string
188
+ timeout time.Duration
189
+ }
190
+
191
+ type Option func(*Server)
192
+
193
+ func WithTimeout(d time.Duration) Option {
194
+ return func(s *Server) {
195
+ s.timeout = d
196
+ }
197
+ }
198
+
199
+ func NewServer(addr string, opts ...Option) *Server {
200
+ s := &Server{
201
+ addr: addr,
202
+ timeout: time.Second * 30,
203
+ }
204
+ for _, opt := range opts {
205
+ opt(s)
206
+ }
207
+ return s
208
+ }
209
+
210
+ // Usage
211
+ server := NewServer(":8080", WithTimeout(time.Minute))
212
+ ```