summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-03 22:57:52 +0200
committerPaul Buetow <paul@buetow.org>2026-03-03 22:57:52 +0200
commitc74f5ba6ad54760ac4a2010a381148082a86941e (patch)
tree7890d375f043b7b51300556da679d9f9195c42f2
parent1e6a156c59c9808aab8ac11a6f08a79cddb4e719 (diff)
add 100 go mistakes skill
-rw-r--r--prompts/skills/100-go-mistakes/SKILL.md139
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-01-unintended-variable-shadowing.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-02-unnecessary-nested-code.md45
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-03-misusing-init-functions.md18
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-04-overusing-getters-and-setters.md12
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-05-interface-pollution.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-06-interface-on-the-producer-side.md12
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-07-returning-interfaces.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-08-any-says-nothing.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-09-being-confused-about-when-to-use-generics.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-10-not-being-aware-of-the-possible-problems-with-type-embedding.md34
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-100-not-understanding-the-impacts-of-running-go-in-docker-and-kubernetes.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-11-not-using-the-functional-options-pattern.md56
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-12-project-misorganization-project-structure-and-package-organization.md17
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-13-creating-utility-packages.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-14-ignoring-package-name-collisions.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-15-missing-code-documentation.md18
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-16-not-using-linters.md24
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-17-creating-confusion-with-octal-literals.md18
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-18-neglecting-integer-overflows.md16
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-19-not-understanding-floating-points.md23
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-20-not-understanding-slice-length-and-capacity.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-21-inefficient-slice-initialization.md12
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-22-being-confused-about-nil-vs-empty-slice.md16
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-23-not-properly-checking-if-a-slice-is-empty.md12
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-24-not-making-slice-copies-correctly.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-25-unexpected-side-effects-using-slice-append.md15
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-26-slices-and-memory-leaks.md18
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-27-inefficient-map-initialization.md12
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-28-maps-and-memory-leaks.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-29-comparing-values-incorrectly.md28
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-30-ignoring-that-elements-are-copied-in-range-loops.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-31-ignoring-how-arguments-are-evaluated-in-range-loops-channels-and-arrays.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-32-ignoring-the-impacts-of-using-pointer-elements-in-range-loops.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-33-making-wrong-assumptions-during-map-iterations-ordering-and-map-insert-during-iteration.md13
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-34-ignoring-how-the-break-statement-works.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-35-using-defer-inside-a-loop.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-36-not-understanding-the-concept-of-rune.md17
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-37-inaccurate-string-iteration.md60
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-38-misusing-trim-functions.md18
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-39-under-optimized-strings-concatenation.md63
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-40-useless-string-conversions.md12
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-41-substring-and-memory-leaks.md12
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-42-not-knowing-which-type-of-receiver-to-use.md40
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-43-never-using-named-result-parameters.md21
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-44-unintended-side-effects-with-named-result-parameters.md28
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-45-returning-a-nil-receiver.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-46-using-a-filename-as-a-function-input.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-47-ignoring-how-defer-arguments-and-receivers-are-evaluated.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-48-panicking.md27
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-49-ignoring-when-to-wrap-an-error.md15
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-50-comparing-an-error-type-inaccurately.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-51-comparing-an-error-value-inaccurately.md21
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-52-handling-an-error-twice.md12
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-53-not-handling-an-error.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-54-not-handling-defer-errors.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-55-mixing-up-concurrency-and-parallelism.md13
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-56-thinking-concurrency-is-always-faster.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-57-being-puzzled-about-when-to-use-channels-or-mutexes.md23
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-58-not-understanding-race-problems-data-races-vs-race-conditions.md28
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-59-not-understanding-the-concurrency-impacts-of-a-workload-type.md21
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-60-misunderstanding-go-contexts.md42
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-61-propagating-an-inappropriate-context.md47
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-62-starting-a-goroutine-without-knowing-when-to-stop-it.md64
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-63-not-being-careful-with-goroutines-and-loop-variables.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-64-expecting-a-deterministic-behavior-using-select-and-channels.md51
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-65-not-using-notification-channels.md16
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-66-not-using-nil-channels.md52
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-67-being-puzzled-about-channel-size.md43
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-68-forgetting-about-possible-side-effects-with-string-formatting.md76
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-69-creating-data-races-with-append.md48
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-70-using-mutexes-inaccurately-with-slices-and-maps.md74
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-71-misusing-syncwaitgroup.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-72-forgetting-about-synccond.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-73-not-using-errgroup.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-74-copying-a-sync-type.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-75-providing-a-wrong-time-duration.md28
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-76-timeafter-and-memory-leaks.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-77-json-handling-common-mistakes.md19
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-78-common-sql-mistakes.md29
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-79-not-closing-transient-resources-http-body-sqlrows-and-osfile.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-80-forgetting-the-return-statement-after-replying-to-an-http-request.md42
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-81-using-the-default-http-client-and-server.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-82-not-categorizing-tests-build-tags-environment-variables-and-short-mode.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-83-not-enabling-the-race-flag.md69
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-84-not-using-test-execution-modes-parallel-and-shuffle.md6
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-85-not-using-table-driven-tests.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-86-sleeping-in-unit-tests.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-87-not-dealing-with-the-time-api-efficiently.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-88-not-using-testing-utility-packages-httptest-and-iotest.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-89-writing-inaccurate-benchmarks.md16
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-90-not-exploring-all-the-go-testing-features---not-using-fuzzing.md23
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-91-not-understanding-cpu-caches.md25
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-92-writing-concurrent-code-that-leads-to-false-sharing.md10
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-93-not-taking-into-account-instruction-level-parallelism.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-94-not-being-aware-of-data-alignment.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-95-not-understanding-stack-vs-heap.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-96-not-knowing-how-to-reduce-allocations.md3
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-97-not-relying-on-inlining.md6
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-98-not-using-go-diagnostics-tooling.md8
-rw-r--r--prompts/skills/100-go-mistakes/references/mistake-99-not-understanding-how-the-gc-works.md3
101 files changed, 2034 insertions, 0 deletions
diff --git a/prompts/skills/100-go-mistakes/SKILL.md b/prompts/skills/100-go-mistakes/SKILL.md
new file mode 100644
index 0000000..0dd9633
--- /dev/null
+++ b/prompts/skills/100-go-mistakes/SKILL.md
@@ -0,0 +1,139 @@
+---
+name: 100-go-mistakes
+description: Audits Go code repositories for common mistakes as identified in the "100 Go Mistakes and How to Avoid Them" book. Use this skill when asked to review Go code, check for best practices, or find common anti-patterns in Go.
+---
+
+# 100 Go Mistakes
+
+This skill helps you identify and fix the most common mistakes made by Go developers. It is based on the book "100 Go Mistakes and How to Avoid Them" by Teiva Harsanyi.
+
+## Workflow
+
+1. **Trigger**: When asked to review Go code or find mistakes, activate this skill.
+2. **Analysis**: Use the list below to identify potential areas of concern in the target repository.
+3. **Reference**: Read the specific mistake documentation in the `references/` folder to understand the mistake and how to fix it.
+4. **Action**: Suggest or apply fixes to the codebase.
+
+## List of Mistakes
+
+### 1. Code and Project Organization
+- [Mistake #1: Unintended variable shadowing](references/mistake-01-unintended-variable-shadowing.md)
+- [Mistake #2: Unnecessary nested code](references/mistake-02-unnecessary-nested-code.md)
+- [Mistake #3: Misusing init functions](references/mistake-03-misusing-init-functions.md)
+- [Mistake #4: Overusing getters and setters](references/mistake-04-overusing-getters-and-setters.md)
+- [Mistake #5: Interface pollution](references/mistake-05-interface-pollution.md)
+- [Mistake #6: Interface on the producer side](references/mistake-06-interface-on-the-producer-side.md)
+- [Mistake #7: Returning interfaces](references/mistake-07-returning-interfaces.md)
+- [Mistake #8: any says nothing](references/mistake-08-any-says-nothing.md)
+- [Mistake #9: Being confused about when to use generics](references/mistake-09-being-confused-about-when-to-use-generics.md)
+- [Mistake #10: Not being aware of the possible problems with type embedding](references/mistake-10-not-being-aware-of-the-possible-problems-with-type-embedding.md)
+- [Mistake #11: Not using the functional options pattern](references/mistake-11-not-using-the-functional-options-pattern.md)
+- [Mistake #12: Project misorganization](references/mistake-12-project-misorganization-project-structure-and-package-organization.md)
+- [Mistake #13: Creating utility packages](references/mistake-13-creating-utility-packages.md)
+- [Mistake #14: Ignoring package name collisions](references/mistake-14-ignoring-package-name-collisions.md)
+- [Mistake #15: Missing code documentation](references/mistake-15-missing-code-documentation.md)
+- [Mistake #16: Not using linters](references/mistake-16-not-using-linters.md)
+
+### 2. Data Types
+- [Mistake #17: Creating confusion with octal literals](references/mistake-17-creating-confusion-with-octal-literals.md)
+- [Mistake #18: Neglecting integer overflows](references/mistake-18-neglecting-integer-overflows.md)
+- [Mistake #19: Not understanding floating-points](references/mistake-19-not-understanding-floating-points.md)
+- [Mistake #20: Not understanding slice length and capacity](references/mistake-20-not-understanding-slice-length-and-capacity.md)
+- [Mistake #21: Inefficient slice initialization](references/mistake-21-inefficient-slice-initialization.md)
+- [Mistake #22: Being confused about nil vs. empty slice](references/mistake-22-being-confused-about-nil-vs-empty-slice.md)
+- [Mistake #23: Not properly checking if a slice is empty](references/mistake-23-not-properly-checking-if-a-slice-is-empty.md)
+- [Mistake #24: Not making slice copies correctly](references/mistake-24-not-making-slice-copies-correctly.md)
+- [Mistake #25: Unexpected side effects using slice append](references/mistake-25-unexpected-side-effects-using-slice-append.md)
+- [Mistake #26: Slices and memory leaks](references/mistake-26-slices-and-memory-leaks.md)
+- [Mistake #27: Inefficient map initialization](references/mistake-27-inefficient-map-initialization.md)
+- [Mistake #28: Maps and memory leaks](references/mistake-28-maps-and-memory-leaks.md)