vibes-plug 1.0.0 → 2.11.0

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 (183) hide show
  1. package/.claude/rules/vibes-plug-core.md +32 -0
  2. package/.cursor/rules/vibes-plug-core.mdc +51 -0
  3. package/.cursorrules +42 -0
  4. package/AGENTS.md +96 -0
  5. package/BLUEPRINT.md +309 -125
  6. package/CHANGELOG.md +183 -1
  7. package/CLAUDE.md +70 -0
  8. package/LICENSE +1 -1
  9. package/README.md +641 -263
  10. package/index.js +19 -0
  11. package/package.json +61 -25
  12. package/plugin.json +24 -7
  13. package/scripts/generate_swarm_gif.py +295 -0
  14. package/scripts/install.js +201 -0
  15. package/skills/accessibility-testing-expert/SKILL.md +116 -0
  16. package/skills/ai-cost-token-optimizer/SKILL.md +82 -0
  17. package/skills/ai-evals-benchmark-expert/SKILL.md +188 -0
  18. package/skills/ai-llm-integration-expert/SKILL.md +147 -122
  19. package/skills/ai-media-generation-expert/SKILL.md +172 -0
  20. package/skills/ai-prompt-engineering-expert/SKILL.md +84 -0
  21. package/skills/angular-expert/SKILL.md +148 -0
  22. package/skills/api-design-expert/SKILL.md +316 -309
  23. package/skills/api-gateway-proxy-expert/SKILL.md +81 -0
  24. package/skills/app-analyzer-optimizer/SKILL.md +195 -188
  25. package/skills/apple-ecosystem-expert/SKILL.md +145 -0
  26. package/skills/{asisten_ramah → asisten-ramah}/SKILL.md +7 -1
  27. package/skills/astro-framework-expert/SKILL.md +200 -0
  28. package/skills/async-queue-temporal-expert/SKILL.md +240 -0
  29. package/skills/authentication-identity-expert/SKILL.md +279 -45
  30. package/skills/auto-doc-updater/SKILL.md +219 -203
  31. package/skills/autonomous-chaos-monkey/SKILL.md +63 -0
  32. package/skills/autonomous-red-teamer/SKILL.md +203 -0
  33. package/skills/autonomous-tdd-debugger/SKILL.md +71 -0
  34. package/skills/background-jobs-queue-expert/SKILL.md +235 -0
  35. package/skills/biome-linter-formatter-expert/SKILL.md +89 -0
  36. package/skills/blockchain-web3-expert/SKILL.md +115 -0
  37. package/skills/bootstrap-to-modern/SKILL.md +93 -86
  38. package/skills/brainstorming/SKILL.md +381 -353
  39. package/skills/browser-automation-expert/SKILL.md +222 -0
  40. package/skills/bun-runtime-expert/SKILL.md +7 -1
  41. package/skills/chatbot-messaging-expert/SKILL.md +114 -0
  42. package/skills/ci-cd-devops-architect/SKILL.md +81 -45
  43. package/skills/cloud-hosting-expert/SKILL.md +249 -243
  44. package/skills/coderabbit/SKILL.md +197 -191
  45. package/skills/compliance-gdpr-privacy-expert/SKILL.md +85 -0
  46. package/skills/cron-scheduler-expert/SKILL.md +304 -0
  47. package/skills/data-pipeline-etl-expert/SKILL.md +84 -0
  48. package/skills/data-telemetry-expert/SKILL.md +218 -212
  49. package/skills/data-visualization-expert/SKILL.md +154 -0
  50. package/skills/database-migration-versioning-expert/SKILL.md +90 -0
  51. package/skills/database-orm-expert/SKILL.md +303 -293
  52. package/skills/dependency-upgrade-migrator/SKILL.md +301 -0
  53. package/skills/design-system-architect/SKILL.md +278 -242
  54. package/skills/desktop-electron-expert/SKILL.md +128 -0
  55. package/skills/documentation-site-expert/SKILL.md +59 -0
  56. package/skills/doku-mcp-server/SKILL.md +257 -0
  57. package/skills/doku-payment-gateway/SKILL.md +233 -0
  58. package/skills/domain-driven-design-expert/SKILL.md +82 -0
  59. package/skills/e2e-testing-expert/SKILL.md +320 -314
  60. package/skills/ecommerce-expert/SKILL.md +87 -0
  61. package/skills/edge-serverless-db-expert/SKILL.md +99 -0
  62. package/skills/email-notification-expert/SKILL.md +368 -0
  63. package/skills/error-resilience-expert/SKILL.md +486 -0
  64. package/skills/event-driven-architect/SKILL.md +86 -80
  65. package/skills/feature-flag-analytics-expert/SKILL.md +66 -0
  66. package/skills/file-upload-media-expert/SKILL.md +437 -0
  67. package/skills/firebase-security-expert/SKILL.md +7 -1
  68. package/skills/form-validation-expert/SKILL.md +407 -0
  69. package/skills/fullstack-expert/SKILL.md +260 -201
  70. package/skills/fullstack-expert/references/api_design_guide.md +466 -466
  71. package/skills/fullstack-expert/references/multi_language_backend.md +528 -528
  72. package/skills/fullstack-expert/scripts/api_contract_validator.py +253 -253
  73. package/skills/fullstack-expert/scripts/architecture_analyzer.py +326 -326
  74. package/skills/gemini-agent-booster/SKILL.md +142 -104
  75. package/skills/geospatial-maps-expert/SKILL.md +80 -0
  76. package/skills/global-a11y-i18n-expert/SKILL.md +86 -80
  77. package/skills/glsl-shader-expert/SKILL.md +107 -0
  78. package/skills/go-programming-expert/SKILL.md +300 -294
  79. package/skills/graph-rag-knowledge-expert/SKILL.md +159 -0
  80. package/skills/graphql-apollo-expert/SKILL.md +114 -0
  81. package/skills/headless-cms-expert/SKILL.md +181 -0
  82. package/skills/hig/SKILL.md +193 -187
  83. package/skills/js-backend-expert/SKILL.md +218 -191
  84. package/skills/legacy-code-translator/SKILL.md +71 -0
  85. package/skills/local-slm-edge-ai-expert/SKILL.md +167 -0
  86. package/skills/logging-error-tracking-expert/SKILL.md +344 -0
  87. package/skills/mcp-client-orchestrator/SKILL.md +76 -0
  88. package/skills/mcp-server-architect/SKILL.md +226 -126
  89. package/skills/micro-frontend-architect/SKILL.md +112 -0
  90. package/skills/mobile-expo-expert/SKILL.md +191 -185
  91. package/skills/mobile-push-notification-expert/SKILL.md +71 -0
  92. package/skills/modern-css-native-expert/SKILL.md +189 -0
  93. package/skills/monday-design-aesthetic/SKILL.md +72 -66
  94. package/skills/monorepo-architect/SKILL.md +232 -226
  95. package/skills/mpa-orchestrator/SKILL.md +120 -101
  96. package/skills/multi-agent-orchestration/SKILL.md +173 -153
  97. package/skills/multiple-entry-points/SKILL.md +91 -55
  98. package/skills/mvc-expert/SKILL.md +237 -231
  99. package/skills/n8n-automation-expert/SKILL.md +89 -0
  100. package/skills/nextjs-app-router-expert/SKILL.md +148 -0
  101. package/skills/openapi-swagger-codegen-expert/SKILL.md +67 -0
  102. package/skills/payment-gateway-expert/SKILL.md +129 -45
  103. package/skills/pdf-document-generation-expert/SKILL.md +91 -0
  104. package/skills/performance-web-vitals/SKILL.md +337 -331
  105. package/skills/post-quantum-crypto-migrator/SKILL.md +57 -0
  106. package/skills/prd-architect/SKILL.md +206 -190
  107. package/skills/proactive-background-watcher/SKILL.md +68 -0
  108. package/skills/production-ready-hardener/PRODUCTION_READINESS_REPORT.md +67 -0
  109. package/skills/production-ready-hardener/SKILL.md +461 -468
  110. package/skills/production-ready-hardener/references/production_checklist.md +161 -161
  111. package/skills/production-ready-hardener/scripts/production_readiness_scanner.py +881 -875
  112. package/skills/project-context-mapper/SKILL.md +85 -0
  113. package/skills/pwa-offline-first-expert/SKILL.md +185 -0
  114. package/skills/python-programming-expert/SKILL.md +407 -270
  115. package/skills/rate-limit-abuse-prevention/SKILL.md +377 -0
  116. package/skills/realtime-collaboration-expert/SKILL.md +99 -45
  117. package/skills/rich-text-editor-expert/SKILL.md +177 -0
  118. package/skills/rust-programming-expert/SKILL.md +240 -234
  119. package/skills/saas-billing/SKILL.md +382 -376
  120. package/skills/saas-multi-tenant/SKILL.md +256 -236
  121. package/skills/saas-mvp-launcher/SKILL.md +30 -1
  122. package/skills/saas-transformer/SKILL.md +499 -445
  123. package/skills/saas-transformer/references/billing_integration_guide.md +401 -401
  124. package/skills/saas-transformer/references/feature_gating_patterns.md +137 -137
  125. package/skills/saas-transformer/references/saas_transformation_checklist.md +121 -121
  126. package/skills/saas-transformer/scripts/saas_transformation_scanner.py +39 -29
  127. package/skills/scalability-clean-code/SKILL.md +234 -228
  128. package/skills/search-engine-expert/SKILL.md +89 -0
  129. package/skills/secure-fuzz-testing/SKILL.md +7 -1
  130. package/skills/self-evolving-memory-graph/SKILL.md +91 -0
  131. package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -0
  132. package/skills/senior-frontend/SKILL.md +85 -105
  133. package/skills/seo/SKILL.md +258 -224
  134. package/skills/session-context-loader/SKILL.md +83 -0
  135. package/skills/session-handoff-resume/SKILL.md +163 -157
  136. package/skills/{skill_baru → skill-baru}/SKILL.md +177 -146
  137. package/skills/solidjs-expert/SKILL.md +80 -0
  138. package/skills/spa-orchestrator/SKILL.md +306 -287
  139. package/skills/sse-websocket-streaming-expert/SKILL.md +93 -0
  140. package/skills/state-management-expert/SKILL.md +277 -271
  141. package/skills/supabase-migration/SKILL.md +47 -1
  142. package/skills/supabase-security-expert/SKILL.md +248 -242
  143. package/skills/svelte-sveltekit-expert/SKILL.md +91 -0
  144. package/skills/svg-animation-motion-expert/SKILL.md +115 -0
  145. package/skills/tailwind-expert/SKILL.md +139 -187
  146. package/skills/tanstack-query-expert/SKILL.md +204 -198
  147. package/skills/tauri-expert/SKILL.md +7 -1
  148. package/skills/token-saver/SKILL.md +118 -110
  149. package/skills/typescript-expert/SKILL.md +329 -278
  150. package/skills/ui-components-expert/SKILL.md +166 -63
  151. package/skills/ui-ux-pro-max/SKILL.md +221 -200
  152. package/skills/vector-db-rag-expert/SKILL.md +208 -0
  153. package/skills/vibe-code-gardener/SKILL.md +180 -172
  154. package/skills/visual-qa-vision-agent/SKILL.md +71 -0
  155. package/skills/voice-ai-realtime-agent/SKILL.md +202 -0
  156. package/skills/vue-frontend-expert/SKILL.md +132 -0
  157. package/skills/wasm-edge-computing-expert/SKILL.md +97 -0
  158. package/skills/web-3d-graphics-expert/SKILL.md +137 -0
  159. package/skills/web-game-engine-expert/SKILL.md +102 -0
  160. package/skills/web-scraper/SKILL.md +98 -146
  161. package/skills/website-design-cloner/SKILL.md +180 -0
  162. package/skills/webxr-ar-vr-expert/SKILL.md +123 -0
  163. package/skills/wordpress-headless-expert/SKILL.md +144 -0
  164. package/skills/zero-to-prod-orchestrator/SKILL.md +231 -180
  165. package/skills/zero-trust-secret-vault/SKILL.md +88 -0
  166. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  167. package/CONTRIBUTING.md +0 -199
  168. package/SECURITY.md +0 -21
  169. package/banner.png +0 -0
  170. package/skills/senior-fullstack/SKILL.md +0 -167
  171. package/skills/senior-fullstack/references/architecture_patterns.md +0 -160
  172. package/skills/senior-fullstack/references/development_workflows.md +0 -222
  173. package/skills/senior-fullstack/references/tech_stack_guide.md +0 -190
  174. package/skills/senior-fullstack/scripts/code_quality_analyzer.py +0 -114
  175. package/skills/senior-fullstack/scripts/fullstack_scaffolder.py +0 -114
  176. package/skills/senior-fullstack/scripts/project_scaffolder.py +0 -114
  177. package/skills/seo-aeo-landing-page-writer/SKILL.md +0 -97
  178. package/skills/seo-geo/SKILL.md +0 -188
  179. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
  180. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
  181. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
  182. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  183. package/skills/ui_ux_expert/SKILL.md +0 -114
@@ -1,295 +1,301 @@
1
- ---
2
- name: go-programming-expert
3
- description: "Expert-level skill for Go programming (Go 1.23/1.24+). Covers high-performance microservices, concurrency patterns, sqlc, net/http, Gin/Echo/Fiber, gRPC, and testing in English and Indonesian."
1
+ ---
2
+ name: go-programming-expert
3
+ description: "Expert-level skill for Go programming (Go 1.25+). Covers high-performance microservices, concurrency patterns, sqlc, net/http, Gin/Echo/Fiber, gRPC, and testing in English and Indonesian."
4
4
  author: "Roedy Rustam"
5
- ---
6
-
7
- # Go Programming Expert (Go 1.24 Edition)
8
-
9
- [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
-
11
- ---
12
-
13
- <a name="english"></a>
14
- ## English
15
-
16
- ### Description
17
- Expert-level Go development for building high-performance microservices, APIs, and CLI tools. Covers **Go 1.24** features (range-over-func iterators, generic type aliases, weak pointers), structured logging with `slog`, `net/http` with the new ServeMux patterns, Gin/Echo/Fiber frameworks, sqlc for type-safe SQL, gRPC, and production testing patterns.
18
-
19
- ### Trigger Conditions
20
- - Writing Go 1.23+ / 1.24+ microservices or APIs.
21
- - Implementing concurrency patterns with goroutines, channels, and `sync` primitives.
22
- - Using structured logging with `log/slog`.
23
- - Building HTTP servers with `net/http` ServeMux (Go 1.22+) or Gin/Echo/Fiber.
24
- - Writing type-safe SQL with **sqlc** or using **GORM**.
25
- - Implementing gRPC services with protobuf.
26
- - Writing Go tests with the standard `testing` package + `testify`.
27
-
28
- ### Go 1.24 Key Features
29
-
30
- #### Range-Over-Func (Go 1.22 → Stable in 1.24)
31
- Range over custom iterators enables functional-style collection operations:
32
- ```go
33
- // Define an iterator function
34
- func Fibonacci() iter.Seq[int] {
35
- return func(yield func(int) bool) {
36
- a, b := 0, 1
37
- for {
38
- if !yield(a) {
39
- return
40
- }
41
- a, b = b, a+b
42
- }
43
- }
44
- }
45
-
46
- // Range over it naturally
47
- for n := range Fibonacci() {
48
- if n > 100 {
49
- break
50
- }
51
- fmt.Println(n)
52
- }
53
- ```
54
-
55
- #### Generic Type Aliases (Go 1.24)
56
- ```go
57
- // Type alias with generic parameters
58
- type Set[T comparable] = map[T]struct{}
59
- type Result[T any] = struct{ Value T; Err error }
60
-
61
- // Usage
62
- var s Set[string] = make(map[string]struct{})
63
- ```
64
-
65
- #### Weak Pointers (Go 1.24)
66
- ```go
67
- import "weak"
68
-
69
- // Weak pointer — does not prevent GC collection
70
- ptr := weak.Make(&myStruct{})
71
- if val := ptr.Value(); val != nil {
72
- // Still alive
73
- }
74
- ```
75
-
76
- ### Structured Logging with `log/slog`
77
- ```go
78
- package main
79
-
80
- import (
81
- "log/slog"
82
- "os"
83
- )
84
-
85
- func main() {
86
- // Production JSON logger
87
- logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
88
- Level: slog.LevelInfo,
89
- AddSource: true, // include file:line
90
- }))
91
- slog.SetDefault(logger)
92
-
93
- slog.Info("server started", "port", 8080, "env", "production")
94
- slog.Error("database connection failed", "error", err, "host", dbHost)
95
-
96
- // Grouped context
97
- reqLogger := logger.WithGroup("request").With(
98
- "trace_id", traceID,
99
- "user_id", userID,
100
- )
101
- reqLogger.Info("handler called", "method", r.Method, "path", r.URL.Path)
102
- }
103
- ```
104
-
105
- ### HTTP Server — net/http ServeMux (Go 1.22+)
106
- Go 1.22 upgraded the standard ServeMux with method-based routing and path parameters — reducing the need for external routers:
107
- ```go
108
- package main
109
-
110
- import (
111
- "encoding/json"
112
- "net/http"
113
- "log/slog"
114
- )
115
-
116
- func main() {
117
- mux := http.NewServeMux()
118
-
119
- // Method + path pattern matching (Go 1.22+)
120
- mux.HandleFunc("GET /api/users", listUsers)
121
- mux.HandleFunc("POST /api/users", createUser)
122
- mux.HandleFunc("GET /api/users/{id}", getUser) // path params
123
- mux.HandleFunc("DELETE /api/users/{id}", deleteUser)
124
-
125
- slog.Info("starting server", "addr", ":8080")
126
- http.ListenAndServe(":8080", mux)
127
- }
128
-
129
- func getUser(w http.ResponseWriter, r *http.Request) {
130
- id := r.PathValue("id") // Extract path parameter
131
- // ...
132
- w.Header().Set("Content-Type", "application/json")
133
- json.NewEncoder(w).Encode(user)
134
- }
135
- ```
136
-
137
- ### Type-Safe SQL with sqlc
138
- ```bash
139
- # Install sqlc
140
- go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
141
-
142
- # sqlc.yaml
143
- version: "2"
144
- sql:
145
- - engine: "postgresql"
146
- queries: "queries/"
147
- schema: "schema/"
148
- gen:
149
- go:
150
- package: "db"
151
- out: "internal/db"
152
- emit_json_tags: true
153
- emit_interface: true
154
- ```
155
-
156
- ```sql
157
- -- queries/users.sql
158
- -- name: GetUser :one
159
- SELECT * FROM users WHERE id = $1 LIMIT 1;
160
-
161
- -- name: ListUsers :many
162
- SELECT * FROM users ORDER BY created_at DESC LIMIT $1 OFFSET $2;
163
-
164
- -- name: CreateUser :one
165
- INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *;
166
- ```
167
-
168
- ```go
169
- // Generated type-safe Go code (used in handlers)
170
- user, err := queries.GetUser(ctx, userID) // Fully typed!
171
- users, err := queries.ListUsers(ctx, db.ListUsersParams{Limit: 20, Offset: 0})
172
- ```
173
-
174
- ### Concurrency Patterns
175
-
176
- #### errgroup for Parallel Work
177
- ```go
178
- import "golang.org/x/sync/errgroup"
179
-
180
- g, ctx := errgroup.WithContext(context.Background())
181
-
182
- g.Go(func() error { return fetchA(ctx) })
183
- g.Go(func() error { return fetchB(ctx) })
184
-
185
- if err := g.Wait(); err != nil {
186
- // First error from any goroutine
187
- return fmt.Errorf("parallel fetch: %w", err)
188
- }
189
- ```
190
-
191
- #### Worker Pool Pattern
192
- ```go
193
- func workerPool(jobs <-chan Job, results chan<- Result, numWorkers int) {
194
- var wg sync.WaitGroup
195
- for range numWorkers {
196
- wg.Add(1)
197
- go func() {
198
- defer wg.Done()
199
- for job := range jobs {
200
- results <- process(job)
201
- }
202
- }()
203
- }
204
- wg.Wait()
205
- close(results)
206
- }
207
- ```
208
-
209
- ### Testing Best Practices
210
- ```go
211
- package user_test
212
-
213
- import (
214
- "testing"
215
- "github.com/stretchr/testify/assert"
216
- "github.com/stretchr/testify/require"
217
- )
218
-
219
- func TestGetUser(t *testing.T) {
220
- t.Parallel() // Always parallelize independent tests
221
-
222
- // Table-driven tests
223
- tests := []struct{
224
- name string
225
- userID string
226
- want *User
227
- wantErr bool
228
- }{
229
- {"valid user", "user-123", &User{ID: "user-123"}, false},
230
- {"not found", "missing", nil, true},
231
- }
232
-
233
- for _, tt := range tests {
234
- t.Run(tt.name, func(t *testing.T) {
235
- t.Parallel()
236
- got, err := GetUser(context.Background(), tt.userID)
237
- if tt.wantErr {
238
- require.Error(t, err)
239
- return
240
- }
241
- require.NoError(t, err)
242
- assert.Equal(t, tt.want.ID, got.ID)
243
- })
244
- }
245
- }
246
- ```
247
-
248
- ---
249
-
250
- <a name="bahasa-indonesia"></a>
251
- ## Bahasa Indonesia
252
-
253
- ### Deskripsi
254
- Panduan Go tingkat ahli untuk membangun microservices, API, dan CLI tool berkinerja tinggi. Mencakup fitur **Go 1.24** (range-over-func, generic type alias, weak pointer), structured logging dengan `slog`, ServeMux `net/http` dengan pola baru (Go 1.22+), framework Gin/Echo/Fiber, sqlc untuk SQL type-safe, gRPC, dan pola pengujian produksi.
255
-
256
- ### Kondisi Pemicu
257
- - Menulis microservices atau API Go 1.23+/1.24+.
258
- - Mengimplementasikan pola konkurensi dengan goroutine, channel, dan primitif `sync`.
259
- - Menggunakan structured logging dengan `log/slog`.
260
- - Membangun HTTP server dengan ServeMux `net/http` (Go 1.22+) atau Gin/Echo/Fiber.
261
- - Menulis SQL type-safe dengan **sqlc** atau GORM.
262
- - Mengimplementasikan layanan gRPC dengan protobuf.
263
-
264
- ### Go 1.24 Fitur Utama
265
-
266
- #### Range-Over-Func (Stabil di 1.24)
267
- Go 1.24 menstabilkan range over iterator function — memungkinkan koleksi gaya fungsional yang idiomatis tanpa mengekspos slice internal.
268
-
269
- #### Generic Type Alias
270
- Go 1.24 memungkinkan alias tipe dengan parameter generic, meningkatkan komposibilitas tipe.
271
-
272
- #### Weak Pointer
273
- `weak.Make()` membuat pointer lemah yang tidak mencegah GC mengumpulkan objek berguna untuk cache.
274
-
275
- ### Structured Logging dengan `log/slog`
276
- Paket `log/slog` bawaan Go (sejak 1.21) mendukung output JSON terstruktur, level log, dan pengelompokan atribut. Gunakan sebagai standar logging di semua proyek Go baru.
277
-
278
- ### HTTP Server — net/http ServeMux (Go 1.22+)
279
- ServeMux Go 1.22 mendukung pencocokan berdasarkan metode HTTP dan parameter path mengurangi kebutuhan router eksternal untuk API sederhana.
280
-
281
- ### SQL Type-Safe dengan sqlc
282
- `sqlc` menghasilkan kode Go yang fully typed dari query SQL dan skema database menghilangkan kebutuhan ORM untuk sebagian besar kasus.
283
-
284
- ### Pola Konkurensi
285
-
286
- #### errgroup
287
- Gunakan `errgroup.WithContext()` dari `golang.org/x/sync/errgroup` untuk menjalankan goroutine paralel dan mengumpulkan error pertama secara aman.
288
-
289
- #### Worker Pool
290
- Gunakan pola worker pool dengan channel untuk memproses pekerjaan secara paralel dengan jumlah goroutine yang terkendali.
291
-
292
- ### Best Practices Pengujian
293
- - Gunakan `t.Parallel()` untuk semua test independen.
294
- - Gunakan table-driven tests untuk menguji banyak skenario dengan kode minimal.
295
- - Gunakan `testify/assert` dan `testify/require` untuk assertion yang ekspresif.
5
+ ---
6
+
7
+ # Go Programming Expert (Go 1.25 Edition)
8
+
9
+ [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
+
11
+ ---
12
+
13
+ <a name="english"></a>
14
+ ## English
15
+
16
+ ### Orchestration & Integration
17
+ Connects and orchestrates with relevant domain skills like `brainstorming`, `zero-to-prod-orchestrator`, and `project-context-mapper` to ensure cohesive execution.
18
+
19
+ ### Description
20
+ Expert-level Go development for building high-performance microservices, APIs, and CLI tools. Covers **Go 1.25** features (range-over-func iterators, generic type aliases, weak pointers), structured logging with `slog`, `net/http` with the new ServeMux patterns, Gin/Echo/Fiber frameworks, sqlc for type-safe SQL, gRPC, and production testing patterns.
21
+
22
+ ### Trigger Conditions
23
+ - Writing Go 1.24+ / 1.25+ microservices or APIs.
24
+ - Implementing concurrency patterns with goroutines, channels, and `sync` primitives.
25
+ - Using structured logging with `log/slog`.
26
+ - Building HTTP servers with `net/http` ServeMux (Go 1.22+) or Gin/Echo/Fiber.
27
+ - Writing type-safe SQL with **sqlc** or using **GORM**.
28
+ - Implementing gRPC services with protobuf.
29
+ - Writing Go tests with the standard `testing` package + `testify`.
30
+
31
+ ### Go 1.25Key Features
32
+
33
+ #### Range-Over-Func (Go 1.22 → Stable in 1.24/1.25)
34
+ Range over custom iterators — enables functional-style collection operations:
35
+ ```go
36
+ // Define an iterator function
37
+ func Fibonacci() iter.Seq[int] {
38
+ return func(yield func(int) bool) {
39
+ a, b := 0, 1
40
+ for {
41
+ if !yield(a) {
42
+ return
43
+ }
44
+ a, b = b, a+b
45
+ }
46
+ }
47
+ }
48
+
49
+ // Range over it naturally
50
+ for n := range Fibonacci() {
51
+ if n > 100 {
52
+ break
53
+ }
54
+ fmt.Println(n)
55
+ }
56
+ ```
57
+
58
+ #### Generic Type Aliases (Go 1.24/1.25)
59
+ ```go
60
+ // Type alias with generic parameters
61
+ type Set[T comparable] = map[T]struct{}
62
+ type Result[T any] = struct{ Value T; Err error }
63
+
64
+ // Usage
65
+ var s Set[string] = make(map[string]struct{})
66
+ ```
67
+
68
+ #### Weak Pointers (Go 1.24/1.25)
69
+ ```go
70
+ import "weak"
71
+
72
+ // Weak pointer — does not prevent GC collection
73
+ ptr := weak.Make(&myStruct{})
74
+ if val := ptr.Value(); val != nil {
75
+ // Still alive
76
+ }
77
+ ```
78
+
79
+ ### Structured Logging with `log/slog`
80
+ ```go
81
+ package main
82
+
83
+ import (
84
+ "log/slog"
85
+ "os"
86
+ )
87
+
88
+ func main() {
89
+ // Production JSON logger
90
+ logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
91
+ Level: slog.LevelInfo,
92
+ AddSource: true, // include file:line
93
+ }))
94
+ slog.SetDefault(logger)
95
+
96
+ slog.Info("server started", "port", 8080, "env", "production")
97
+ slog.Error("database connection failed", "error", err, "host", dbHost)
98
+
99
+ // Grouped context
100
+ reqLogger := logger.WithGroup("request").With(
101
+ "trace_id", traceID,
102
+ "user_id", userID,
103
+ )
104
+ reqLogger.Info("handler called", "method", r.Method, "path", r.URL.Path)
105
+ }
106
+ ```
107
+
108
+ ### HTTP Server — net/http ServeMux (Go 1.22+)
109
+ Go 1.22 upgraded the standard ServeMux with method-based routing and path parameters — reducing the need for external routers:
110
+ ```go
111
+ package main
112
+
113
+ import (
114
+ "encoding/json"
115
+ "net/http"
116
+ "log/slog"
117
+ )
118
+
119
+ func main() {
120
+ mux := http.NewServeMux()
121
+
122
+ // Method + path pattern matching (Go 1.22+)
123
+ mux.HandleFunc("GET /api/users", listUsers)
124
+ mux.HandleFunc("POST /api/users", createUser)
125
+ mux.HandleFunc("GET /api/users/{id}", getUser) // path params
126
+ mux.HandleFunc("DELETE /api/users/{id}", deleteUser)
127
+
128
+ slog.Info("starting server", "addr", ":8080")
129
+ http.ListenAndServe(":8080", mux)
130
+ }
131
+
132
+ func getUser(w http.ResponseWriter, r *http.Request) {
133
+ id := r.PathValue("id") // Extract path parameter
134
+ // ...
135
+ w.Header().Set("Content-Type", "application/json")
136
+ json.NewEncoder(w).Encode(user)
137
+ }
138
+ ```
139
+
140
+ ### Type-Safe SQL with sqlc
141
+ ```bash
142
+ # Install sqlc
143
+ go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
144
+
145
+ # sqlc.yaml
146
+ version: "2"
147
+ sql:
148
+ - engine: "postgresql"
149
+ queries: "queries/"
150
+ schema: "schema/"
151
+ gen:
152
+ go:
153
+ package: "db"
154
+ out: "internal/db"
155
+ emit_json_tags: true
156
+ emit_interface: true
157
+ ```
158
+
159
+ ```sql
160
+ -- queries/users.sql
161
+ -- name: GetUser :one
162
+ SELECT * FROM users WHERE id = $1 LIMIT 1;
163
+
164
+ -- name: ListUsers :many
165
+ SELECT * FROM users ORDER BY created_at DESC LIMIT $1 OFFSET $2;
166
+
167
+ -- name: CreateUser :one
168
+ INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *;
169
+ ```
170
+
171
+ ```go
172
+ // Generated type-safe Go code (used in handlers)
173
+ user, err := queries.GetUser(ctx, userID) // Fully typed!
174
+ users, err := queries.ListUsers(ctx, db.ListUsersParams{Limit: 20, Offset: 0})
175
+ ```
176
+
177
+ ### Concurrency Patterns
178
+
179
+ #### errgroup for Parallel Work
180
+ ```go
181
+ import "golang.org/x/sync/errgroup"
182
+
183
+ g, ctx := errgroup.WithContext(context.Background())
184
+
185
+ g.Go(func() error { return fetchA(ctx) })
186
+ g.Go(func() error { return fetchB(ctx) })
187
+
188
+ if err := g.Wait(); err != nil {
189
+ // First error from any goroutine
190
+ return fmt.Errorf("parallel fetch: %w", err)
191
+ }
192
+ ```
193
+
194
+ #### Worker Pool Pattern
195
+ ```go
196
+ func workerPool(jobs <-chan Job, results chan<- Result, numWorkers int) {
197
+ var wg sync.WaitGroup
198
+ for range numWorkers {
199
+ wg.Add(1)
200
+ go func() {
201
+ defer wg.Done()
202
+ for job := range jobs {
203
+ results <- process(job)
204
+ }
205
+ }()
206
+ }
207
+ wg.Wait()
208
+ close(results)
209
+ }
210
+ ```
211
+
212
+ ### Testing Best Practices
213
+ ```go
214
+ package user_test
215
+
216
+ import (
217
+ "testing"
218
+ "github.com/stretchr/testify/assert"
219
+ "github.com/stretchr/testify/require"
220
+ )
221
+
222
+ func TestGetUser(t *testing.T) {
223
+ t.Parallel() // Always parallelize independent tests
224
+
225
+ // Table-driven tests
226
+ tests := []struct{
227
+ name string
228
+ userID string
229
+ want *User
230
+ wantErr bool
231
+ }{
232
+ {"valid user", "user-123", &User{ID: "user-123"}, false},
233
+ {"not found", "missing", nil, true},
234
+ }
235
+
236
+ for _, tt := range tests {
237
+ t.Run(tt.name, func(t *testing.T) {
238
+ t.Parallel()
239
+ got, err := GetUser(context.Background(), tt.userID)
240
+ if tt.wantErr {
241
+ require.Error(t, err)
242
+ return
243
+ }
244
+ require.NoError(t, err)
245
+ assert.Equal(t, tt.want.ID, got.ID)
246
+ })
247
+ }
248
+ }
249
+ ```
250
+
251
+ ---
252
+
253
+ <a name="bahasa-indonesia"></a>
254
+ ## Bahasa Indonesia
255
+
256
+ ### Integrasi Orkestrasi
257
+ Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
258
+
259
+ ### Deskripsi
260
+ Panduan Go tingkat ahli untuk membangun microservices, API, dan CLI tool berkinerja tinggi. Mencakup fitur **Go 1.25** (range-over-func, generic type alias, weak pointer), structured logging dengan `slog`, ServeMux `net/http` dengan pola baru (Go 1.22+), framework Gin/Echo/Fiber, sqlc untuk SQL type-safe, gRPC, dan pola pengujian produksi.
261
+
262
+ ### Kondisi Pemicu
263
+ - Menulis microservices atau API Go 1.24+/1.25+.
264
+ - Mengimplementasikan pola konkurensi dengan goroutine, channel, dan primitif `sync`.
265
+ - Menggunakan structured logging dengan `log/slog`.
266
+ - Membangun HTTP server dengan ServeMux `net/http` (Go 1.22+) atau Gin/Echo/Fiber.
267
+ - Menulis SQL type-safe dengan **sqlc** atau GORM.
268
+ - Mengimplementasikan layanan gRPC dengan protobuf.
269
+
270
+ ### Go 1.25 Fitur Utama
271
+
272
+ #### Range-Over-Func (Stabil di 1.24/1.25)
273
+ Go 1.24/1.25 menstabilkan range over iterator function memungkinkan koleksi gaya fungsional yang idiomatis tanpa mengekspos slice internal.
274
+
275
+ #### Generic Type Alias
276
+ Go 1.24/1.25 memungkinkan alias tipe dengan parameter generic, meningkatkan komposibilitas tipe.
277
+
278
+ #### Weak Pointer
279
+ `weak.Make()` membuat pointer lemah yang tidak mencegah GC mengumpulkan objekberguna untuk cache.
280
+
281
+ ### Structured Logging dengan `log/slog`
282
+ Paket `log/slog` bawaan Go (sejak 1.21) mendukung output JSON terstruktur, level log, dan pengelompokan atribut. Gunakan sebagai standar logging di semua proyek Go baru.
283
+
284
+ ### HTTP Server — net/http ServeMux (Go 1.22+)
285
+ ServeMux Go 1.22 mendukung pencocokan berdasarkan metode HTTP dan parameter path — mengurangi kebutuhan router eksternal untuk API sederhana.
286
+
287
+ ### SQL Type-Safe dengan sqlc
288
+ `sqlc` menghasilkan kode Go yang fully typed dari query SQL dan skema database — menghilangkan kebutuhan ORM untuk sebagian besar kasus.
289
+
290
+ ### Pola Konkurensi
291
+
292
+ #### errgroup
293
+ Gunakan `errgroup.WithContext()` dari `golang.org/x/sync/errgroup` untuk menjalankan goroutine paralel dan mengumpulkan error pertama secara aman.
294
+
295
+ #### Worker Pool
296
+ Gunakan pola worker pool dengan channel untuk memproses pekerjaan secara paralel dengan jumlah goroutine yang terkendali.
297
+
298
+ ### Best Practices Pengujian
299
+ - Gunakan `t.Parallel()` untuk semua test independen.
300
+ - Gunakan table-driven tests untuk menguji banyak skenario dengan kode minimal.
301
+ - Gunakan `testify/assert` dan `testify/require` untuk assertion yang ekspresif.