{"id":"c2e8997b-7229-4681-8c14-4b8751c73e82","shortId":"FYZ7KJ","kind":"skill","title":"go-dev","tagline":"Opinionated Go development setup with golangci-lint v2 + gofumpt + gotestsum + golang-migrate + just. Use when creating new Go projects, setting up linting/formatting/testing, configuring CI/CD pipelines, writing Justfiles, or migrating from Makefile-only workflows. Triggers on \"","description":"# Go Development Stack\n\nOpinionated, modern Go development setup. One tool per concern, zero overlap.\n\n## When to Use\n\n- Starting a new Go project from scratch\n- Adding linting, formatting, or testing infrastructure\n- Setting up CI/CD for a Go service or library\n- Creating a Justfile to replace a Makefile\n- Adding database migration tooling\n- Migrating from scattered gofmt/govet/staticcheck invocations to a unified setup\n\n## The Stack\n\n| Tool | Version | Role | Replaces |\n|------|---------|------|----------|\n| **Go** | 1.26+ | Language, toolchain, `go mod` | - |\n| **golangci-lint** | v2.11+ | Meta-linter (100+ linters + formatters + `fmt` command) | gofmt, govet, staticcheck, errcheck run separately |\n| **gofumpt** | v0.9+ | Strict formatter (superset of gofmt, 17+ extra rules) | gofmt |\n| **gotestsum** | v1.13+ | Test runner with readable output, watch mode, JUnit XML | Raw `go test` |\n| **just** | latest | Task runner | Makefile |\n| **golang-migrate** | v4.19+ | DB migrations (CLI + library + `embed.FS`) | Manual SQL scripts |\n\n## Quick Start: New Project\n\n```bash\n# 1. Create module\nmkdir myapp && cd myapp\ngo mod init github.com/yourorg/myapp\n\n# 2. Scaffold directories\nmkdir -p cmd/myapp internal migrations\n\n# 3. Install tools\ngo install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest\ngo install mvdan.cc/gofumpt@latest\ngo install gotest.tools/gotestsum@latest\ngo install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest\n\n# 4. Track tools in go.mod (Go 1.24+)\ngo get -tool github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest\ngo get -tool mvdan.cc/gofumpt@latest\ngo get -tool gotest.tools/gotestsum@latest\n\n# 5. Create config files (templates below)\n# 6. Run: just check\n```\n\n## .golangci.yml\n\n```yaml\nversion: \"2\"\n\nrun:\n  timeout: 5m\n\nlinters:\n  default: standard\n  enable:\n    - bodyclose\n    - copyloopvar\n    - dupl\n    - durationcheck\n    - err113\n    - errname\n    - errorlint\n    - exhaustive\n    - exptostd\n    - fatcontext\n    - goconst\n    - gocritic\n    - gosec\n    - intrange\n    - misspell\n    - modernize\n    - musttag\n    - nakedret\n    - nestif\n    - nilerr\n    - noctx\n    - nolintlint\n    - nonamedreturns\n    - perfsprint\n    - prealloc\n    - revive\n    - sqlclosecheck\n    - testifylint\n    - thelper\n    - unconvert\n    - unparam\n    - usestdlibvars\n    - usetesting\n    - wastedassign\n    - whitespace\n    - wrapcheck\n  settings:\n    govet:\n      enable:\n        - shadow\n    gocritic:\n      enabled-checks:\n        - nestingReduce\n    revive:\n      enable-all-rules: true\n    errcheck:\n      check-type-assertions: true\n  exclusions:\n    generated: strict\n    presets:\n      - comments\n      - std-error-handling\n      - common-false-positives\n    rules:\n      - path: _test\\.go\n        linters:\n          - gocyclo\n          - errcheck\n          - dupl\n          - gosec\n          - wrapcheck\n\nformatters:\n  enable:\n    - gofumpt\n    - goimports\n  settings:\n    gofumpt:\n      extra-rules: true\n  exclusions:\n    generated: strict\n    paths:\n      - vendor/\n\noutput:\n  formats:\n    text:\n      path: stdout\n      print-linter-name: true\n      colors: true\n  sort-order:\n    - linter\n    - file\n  show-stats: true\n```\n\n## Justfile\n\n```just\nset shell := [\"bash\", \"-euo\", \"pipefail\", \"-c\"]\nset dotenv-load := true\n\nbinary := \"myapp\"\n\n[private]\ndefault:\n    @just --list --unsorted\n\n# ── Code Quality ──────────────────────────────────────────\n\n# Format all Go code\n[group('quality')]\nfmt:\n    golangci-lint fmt ./...\n\n# Check formatting without modifying (CI-safe)\n[group('quality')]\nfmt-check:\n    gofumpt -d . 2>&1 | (! grep -q '^') || (gofumpt -l . && exit 1)\n\n# Run linter\n[group('quality')]\nlint:\n    golangci-lint run ./...\n\n# Run linter with auto-fix\n[group('quality')]\nlint-fix:\n    golangci-lint run --fix ./...\n\n# Run vulnerability check\n[group('quality')]\nvuln:\n    govulncheck ./...\n\n# ── Testing ───────────────────────────────────────────────\n\n# Run all tests with race detection\n[group('test')]\ntest *args=\"./...\":\n    gotestsum --format testname -- -race {{ args }}\n\n# Run tests with coverage\n[group('test')]\ntest-cov:\n    gotestsum --format testname -- -race -coverprofile=coverage.out -covermode=atomic ./...\n    go tool cover -func=coverage.out\n\n# Open coverage report in browser\n[group('test')]\ncoverage: test-cov\n    go tool cover -html=coverage.out\n\n# Run integration tests\n[group('test')]\ntest-integration:\n    gotestsum --format testname -- -race -tags=integration ./...\n\n# Watch tests during development\n[group('test')]\ntest-watch:\n    gotestsum --watch --watch-clear --format testname\n\n# Run benchmarks\n[group('test')]\nbench:\n    go test -bench=. -benchmem ./...\n\n# ── Build ─────────────────────────────────────────────────\n\n# Build the binary\n[group('build')]\nbuild:\n    go build -o {{ binary }} ./cmd/{{ binary }}\n\n# Build optimized release binary\n[group('build')]\nbuild-release:\n    CGO_ENABLED=0 go build -trimpath -ldflags=\"-s -w\" -o {{ binary }} ./cmd/{{ binary }}\n\n# ── Dependencies ──────────────────────────────────────────\n\n# Tidy and verify modules\n[group('deps')]\ntidy:\n    go mod tidy\n    go mod verify\n\n# Run code generators\n[group('deps')]\ngenerate:\n    go generate ./...\n\n# ── Database ──────────────────────────────────────────────\n\n# Apply all pending migrations\n[group('db')]\nmigrate-up:\n    migrate -path migrations -database \"$DATABASE_URL\" up\n\n# Revert last migration\n[group('db')]\nmigrate-down:\n    migrate -path migrations -database \"$DATABASE_URL\" down 1\n\n# Create a new migration\n[group('db')]\nmigrate-create name:\n    migrate create -ext sql -dir migrations -seq {{ name }}\n\n# ── CI ────────────────────────────────────────────────────\n\n# Full CI gate (format check + lint + test)\n[group('ci')]\ncheck: fmt-check lint test\n    @echo \"All checks passed\"\n\n# Clean build artifacts\n[group('ci')]\nclean:\n    go clean\n    rm -f {{ binary }} coverage.out\n```\n\n## Lefthook Config\n\nLefthook is preferred over pre-commit for Go projects - it is a single Go binary, runs hooks in parallel, and needs no Python.\n\n```bash\ngo install github.com/evilmartians/lefthook/v2@latest\nlefthook install\n```\n\n```yaml\n# lefthook.yml\npre-commit:\n  piped: true   # run sequentially: fmt -> lint -> mod-tidy (each may modify staged files)\n  commands:\n    fmt:\n      glob: \"*.go\"\n      run: gofumpt -w {staged_files}\n      stage_fixed: true\n    lint:\n      glob: \"*.go\"\n      run: golangci-lint run --fix {staged_files}\n      stage_fixed: true\n    mod-tidy:\n      glob: \"*.{go,mod,sum}\"\n      run: go mod tidy\n\npre-push:\n  commands:\n    test:\n      run: go test -race ./...\n```\n\n## Project Structure\n\n```\nmyapp/\n  cmd/\n    myapp/\n      main.go              # Wire deps, call Run(), nothing else\n  internal/\n    user/                  # Domain logic, one package per domain\n      user.go\n      user_test.go\n      repository.go\n    transport/             # HTTP/gRPC handlers\n    storage/               # Database layer\n  migrations/\n    000001_create_users.up.sql\n    000001_create_users.down.sql\n  testdata/                # Test fixtures (ignored by go toolchain)\n  .golangci.yml\n  lefthook.yml\n  Justfile\n  go.mod\n  go.sum\n  Dockerfile\n```\n\n**Guidelines:**\n- `cmd/` - one directory per binary, keep `main.go` thin (~50 lines max)\n- `internal/` - all business logic goes here (compiler-enforced, cannot be imported externally)\n- `pkg/` - only add when another repo actually imports it today, not \"maybe someday\"\n- `testdata/` - test fixtures, golden files, fuzz corpus\n- `migrations/` - SQL migration files (timestamp or sequential versioned)\n\n## Daily Workflow\n\n```bash\njust fmt          # Format code\njust lint         # Run linter\njust test         # Run tests with race detection\njust check        # Full CI gate (fmt-check + lint + test)\njust test-watch   # Watch mode during development\njust generate     # Run go generate\njust tidy         # go mod tidy + verify\n```\n\n## CI/CD Pipeline (GitHub Actions)\n\n```yaml\nname: Go CI\non:\n  push:\n    branches: [main]\n  pull_request:\n\npermissions:\n  contents: read\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - uses: actions/setup-go@v6\n        with:\n          go-version: stable\n      - uses: golangci/golangci-lint-action@v9\n        with:\n          version: v2.11\n\n  test:\n    runs-on: ubuntu-latest\n    needs: lint\n    strategy:\n      matrix:\n        go-version: [stable, oldstable]\n    steps:\n      - uses: actions/checkout@v6\n      - uses: actions/setup-go@v6\n        with:\n          go-version: ${{ matrix.go-version }}\n      - run: go install gotest.tools/gotestsum@latest\n      - name: Test\n        run: gotestsum --format github-actions --junitfile unit-tests.xml -- -race -coverprofile=coverage.out -covermode=atomic ./...\n      - uses: actions/upload-artifact@v4\n        if: always()\n        with:\n          name: test-results-${{ matrix.go-version }}\n          path: unit-tests.xml\n\n  security:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - uses: actions/setup-go@v6\n        with:\n          go-version: stable\n      - run: go install golang.org/x/vuln/cmd/govulncheck@latest\n      - run: govulncheck ./...\n```\n\n## Existing Project Migration\n\n```bash\n# 1. Install tools\ngo install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest\ngo install mvdan.cc/gofumpt@latest\ngo install gotest.tools/gotestsum@latest\n\n# 2. Migrate existing golangci-lint v1 config\ngolangci-lint migrate\n\n# 3. Format codebase\ngofumpt -w .\n\n# 4. Run linter (fix what you can, nolint the rest)\ngolangci-lint run --fix ./...\n\n# 5. Replace go test with gotestsum in scripts/CI\n# Before: go test -v ./...\n# After:  gotestsum --format testname -- -race ./...\n\n# 6. Copy Justfile and lefthook.yml templates above\n# 7. Run: just check\n```\n\nFor incremental adoption on large codebases, use `only-new-issues: true` in the GitHub Action to only lint changed code.\n\n## Reference Docs\n\n- [golangci-lint Reference](references/golangci-lint-reference.md) - v2 config, linter catalog, recommended sets, nolint syntax\n- [gofumpt Reference](references/gofumpt-reference.md) - formatting rules, editor integration, golangci-lint integration\n- [gotestsum Reference](references/gotestsum-reference.md) - output formats, watch mode, JUnit XML, CI recipes\n- [Go Testing Reference](references/go-testing-reference.md) - table-driven tests, mocking, benchmarks, coverage, fuzz testing\n- [golang-migrate Reference](references/go-migrate-reference.md) - CLI, library, embed.FS, transactions, pitfalls\n- [Justfile Reference](references/justfile-reference.md) - Go-specific recipes, task groups, lefthook integration\n\n## Resources\n\n- [Go Official Docs](https://go.dev/doc/)\n- [golangci-lint Docs](https://golangci-lint.run/)\n- [gofumpt](https://github.com/mvdan/gofumpt)\n- [gotestsum](https://github.com/gotestyourself/gotestsum)\n- [golang-migrate](https://github.com/golang-migrate/migrate)\n- [Lefthook](https://github.com/evilmartians/lefthook)\n- [just](https://github.com/casey/just)\n- [govulncheck](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck)","tags":["dev","skills","tenequm","agent-skills","ai-agents","claude-code","claude-skills","clawhub","erc-8004","mpp","openclaw","solana"],"capabilities":["skill","source-tenequm","skill-go-dev","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-claude-skills","topic-clawhub","topic-erc-8004","topic-mpp","topic-openclaw","topic-skills","topic-solana","topic-x402"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/tenequm/skills/go-dev","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add tenequm/skills","source_repo":"https://github.com/tenequm/skills","install_from":"skills.sh"}},"qualityScore":"0.464","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 28 github stars · SKILL.md body (11,067 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:04:38.384Z","embedding":null,"createdAt":"2026-04-29T19:01:43.834Z","updatedAt":"2026-05-18T19:04:38.384Z","lastSeenAt":"2026-05-18T19:04:38.384Z","tsv":"'/)':1271 '/casey/just)':1293 '/cmd':577,599 '/doc/)':1264 '/evilmartians/lefthook)':1289 '/evilmartians/lefthook/v2@latest':737 '/gofumpt@latest':211,242,1100 '/golang-migrate/migrate)':1285 '/golang-migrate/migrate/v4/cmd/migrate@latest':223 '/golang.org/x/vuln/cmd/govulncheck)':1297 '/golangci/golangci-lint/v2/cmd/golangci-lint@latest':206,236,1095 '/gotestsum@latest':216,248,1027,1105 '/gotestyourself/gotestsum)':1279 '/mvdan/gofumpt)':1275 '/x/vuln/cmd/govulncheck@latest':1081 '/yourorg/myapp':190 '0':590 '000001_create_users.down.sql':836 '000001_create_users.up.sql':835 '1':178,434,440,655,1088 '1.24':230 '1.26':108 '100':120 '17':138 '2':191,262,433,1106 '3':199,1118 '4':224,1123 '5':249,1138 '50':859 '5m':265 '6':255,1155 '7':1162 'action':953,1035,1181 'actions/checkout':977,1011,1066 'actions/setup-go':980,1014,1069 'actions/upload-artifact':1044 'actual':881 'ad':66,88 'add':877 'adopt':1168 'alway':1047 'anoth':879 'appli':624 'arg':483,488 'artifact':696 'assert':325 'atom':505,1042 'auto':454 'auto-fix':453 'bash':177,390,732,905,1087 'bench':561,564 'benchmark':558,1233 'benchmem':565 'binari':399,569,576,578,582,598,600,704,723,855 'bodyclos':270 'branch':960 'browser':515 'build':566,567,571,572,574,579,584,586,592,695 'build-releas':585 'busi':864 'c':393 'call':813 'cannot':871 'catalog':1197 'cd':183 'cgo':588 'chang':1185 'check':258,313,323,419,430,468,679,684,687,692,922,928,1165 'check-type-assert':322 'ci':424,674,676,683,698,924,957,1222 'ci-saf':423 'ci/cd':29,74,950 'clean':694,699,701 'clear':554 'cli':167,1242 'cmd':808,851 'cmd/myapp':196 'code':406,411,616,909,1186 'codebas':1120,1171 'color':375 'command':124,759,799 'comment':331 'commit':714,744 'common':337 'common-false-posit':336 'compil':869 'compiler-enforc':868 'concern':53 'config':251,707,1113,1195 'configur':28 'content':965 'copi':1156 'copyloopvar':271 'corpus':894 'cov':497,521 'cover':508,524 'coverag':492,512,518,1234 'coverage.out':503,510,526,705,1040 'covermod':504,1041 'coverprofil':502,1039 'creat':21,81,179,250,656,664,667 'd':432 'daili':903 'databas':89,623,636,637,651,652,832 'db':165,629,644,661 'default':267,402 'dep':607,619,812 'depend':601 'detect':479,920 'dev':3 'develop':6,43,48,544,938 'dir':670 'directori':193,853 'doc':1188,1261,1268 'dockerfil':849 'domain':819,824 'dotenv':396 'dotenv-load':395 'driven':1230 'dupl':272,347 'durationcheck':273 'echo':690 'editor':1207 'els':816 'embed.fs':169,1244 'enabl':269,308,312,317,351,589 'enable-all-rul':316 'enabled-check':311 'enforc':870 'err113':274 'errcheck':128,321,346 'errnam':275 'error':334 'errorlint':276 'euo':391 'exclus':327,360 'exhaust':277 'exist':1084,1108 'exit':439 'exptostd':278 'ext':668 'extern':874 'extra':139,357 'extra-rul':356 'f':703 'fals':338 'fatcontext':279 'file':252,381,758,767,781,892,898 'fix':455,460,465,769,779,783,1126,1137 'fixtur':839,890 'fmt':123,414,418,429,686,749,760,907,927 'fmt-check':428,685,926 'format':68,366,408,420,485,499,536,555,678,908,1032,1119,1152,1205,1217 'formatt':122,134,350 'full':675,923 'func':509 'fuzz':893,1235 'gate':677,925 'generat':328,361,617,620,622,940,943 'get':232,238,244 'github':952,1034,1180 'github-act':1033 'github.com':189,205,222,235,736,1094,1274,1278,1284,1288,1292 'github.com/casey/just)':1291 'github.com/evilmartians/lefthook)':1287 'github.com/evilmartians/lefthook/v2@latest':735 'github.com/golang-migrate/migrate)':1283 'github.com/golang-migrate/migrate/v4/cmd/migrate@latest':221 'github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest':204,234,1093 'github.com/gotestyourself/gotestsum)':1277 'github.com/mvdan/gofumpt)':1273 'github.com/yourorg/myapp':188 'glob':761,772,788 'go':2,5,23,42,47,62,77,107,111,154,185,202,207,212,217,229,231,237,243,343,410,506,522,562,573,591,609,612,621,700,716,722,733,762,773,789,793,802,842,942,946,956,984,1005,1018,1023,1073,1077,1091,1096,1101,1140,1147,1224,1251,1259 'go-dev':1 'go-specif':1250 'go-vers':983,1004,1017,1072 'go.dev':1263 'go.dev/doc/)':1262 'go.mod':228,847 'go.sum':848 'goconst':280 'gocrit':281,310 'gocyclo':345 'goe':866 'gofmt':125,137,141 'gofmt/govet/staticcheck':95 'gofumpt':13,131,352,355,431,437,764,1121,1202,1272 'goimport':353 'golang':16,162,1238,1281 'golang-migr':15,161,1237,1280 'golang.org':1080 'golang.org/x/vuln/cmd/govulncheck@latest':1079 'golangci':10,114,416,447,462,776,1110,1115,1134,1190,1210,1266 'golangci-lint':9,113,415,446,461,775,1109,1114,1133,1189,1209,1265 'golangci-lint.run':1270 'golangci-lint.run/)':1269 'golangci.yml':259,844 'golangci/golangci-lint-action':988 'golden':891 'gosec':282,348 'gotest.tools':215,247,1026,1104 'gotest.tools/gotestsum@latest':214,246,1025,1103 'gotestsum':14,142,484,498,535,550,1031,1143,1151,1213,1276 'govet':126,307 'govulncheck':472,1083,1294 'grep':435 'group':412,426,443,456,469,480,493,516,530,545,559,570,583,606,618,628,643,660,682,697,1255 'guidelin':850 'handl':335 'handler':830 'hook':725 'html':525 'http/grpc':829 'ignor':840 'import':873,882 'increment':1167 'infrastructur':71 'init':187 'instal':200,203,208,213,218,734,739,1024,1078,1089,1092,1097,1102 'integr':528,534,540,1208,1212,1257 'intern':197,817,862 'intrang':283 'invoc':96 'issu':1176 'job':967 'junit':151,1220 'junitfil':1036 'justfil':32,83,386,846,1157,1247 'keep':856 'l':438 'languag':109 'larg':1170 'last':641 'latest':157,974,999,1063 'layer':833 'ldflag':594 'lefthook':706,708,738,1256,1286 'lefthook.yml':741,845,1159 'librari':80,168,1243 'line':860 'lint':11,67,115,417,445,448,459,463,680,688,750,771,777,911,929,968,1001,1111,1116,1135,1184,1191,1211,1267 'lint-fix':458 'linter':119,121,266,344,372,380,442,451,913,1125,1196 'linting/formatting/testing':27 'list':404 'load':397 'logic':820,865 'main':961 'main.go':810,857 'makefil':37,87,160 'makefile-on':36 'manual':170 'matrix':1003 'matrix.go':1020,1053 'max':861 'may':755 'mayb':886 'meta':118 'meta-lint':117 'migrat':17,34,90,92,163,166,198,627,631,633,635,642,646,648,650,659,663,666,671,834,895,897,1086,1107,1117,1239,1282 'migrate-cr':662 'migrate-down':645 'migrate-up':630 'misspel':284 'mkdir':181,194 'mock':1232 'mod':112,186,610,613,752,786,790,794,947 'mod-tidi':751,785 'mode':150,936,1219 'modern':46,285 'modifi':422,756 'modul':180,605 'musttag':286 'mvdan.cc':210,241,1099 'mvdan.cc/gofumpt@latest':209,240,1098 'myapp':182,184,400,807,809 'nakedret':287 'name':373,665,673,955,1028,1049 'need':729,1000 'nestif':288 'nestingreduc':314 'new':22,61,175,658,1175 'nilerr':289 'noctx':290 'nolint':1130,1200 'nolintlint':291 'nonamedreturn':292 'noth':815 'o':575,597 'offici':1260 'oldstabl':1008 'one':50,821,852 'only-new-issu':1173 'open':511 'opinion':4,45 'optim':580 'order':379 'output':148,365,1216 'overlap':55 'p':195 'packag':822 'parallel':727 'pass':693 'path':341,363,368,634,649,1055 'pend':626 'per':52,823,854 'perfsprint':293 'permiss':964 'pipe':745 'pipefail':392 'pipelin':30,951 'pitfal':1246 'pkg':875 'pkg.go.dev':1296 'pkg.go.dev/golang.org/x/vuln/cmd/govulncheck)':1295 'posit':339 'postgr':220 'pre':713,743,797 'pre-commit':712,742 'pre-push':796 'prealloc':294 'prefer':710 'preset':330 'print':371 'print-linter-nam':370 'privat':401 'project':24,63,176,717,805,1085 'pull':962 'push':798,959 'python':731 'q':436 'qualiti':407,413,427,444,457,470 'quick':173 'race':478,487,501,538,804,919,1038,1154 'raw':153 'read':966 'readabl':147 'recip':1223,1253 'recommend':1198 'refer':1187,1192,1203,1214,1226,1240,1248 'references/go-migrate-reference.md':1241 'references/go-testing-reference.md':1227 'references/gofumpt-reference.md':1204 'references/golangci-lint-reference.md':1193 'references/gotestsum-reference.md':1215 'references/justfile-reference.md':1249 'releas':581,587 'replac':85,106,1139 'repo':880 'report':513 'repository.go':827 'request':963 'resourc':1258 'rest':1132 'result':1052 'revert':640 'reviv':295,315 'rm':702 'role':105 'rule':140,319,340,358,1206 'run':129,256,263,441,449,450,464,466,474,489,527,557,615,724,747,763,774,778,792,801,814,912,916,941,970,995,1022,1030,1059,1076,1082,1124,1136,1163 'runner':145,159 'runs-on':969,994,1058 'safe':425 'scaffold':192 'scatter':94 'scratch':65 'script':172 'scripts/ci':1145 'secur':1057 'separ':130 'seq':672 'sequenti':748,901 'servic':78 'set':25,72,306,354,388,394,1199 'setup':7,49,100 'shadow':309 'shell':389 'show':383 'show-stat':382 'singl':721 'skill' 'skill-go-dev' 'someday':887 'sort':378 'sort-ord':377 'source-tenequm' 'specif':1252 'sql':171,669,896 'sqlclosecheck':296 'stabl':986,1007,1075 'stack':44,102 'stage':757,766,768,780,782 'standard':268 'start':59,174 'stat':384 'staticcheck':127 'std':333 'std-error-handl':332 'stdout':369 'step':975,1009,1064 'storag':831 'strategi':1002 'strict':133,329,362 'structur':806 'sum':791 'superset':135 'syntax':1201 'tabl':1229 'table-driven':1228 'tag':219,539 'task':158,1254 'templat':253,1160 'test':70,144,155,342,473,476,481,482,490,494,496,517,520,529,531,533,542,546,548,560,563,681,689,800,803,838,889,915,917,930,933,993,1029,1051,1141,1148,1225,1231,1236 'test-cov':495,519 'test-integr':532 'test-result':1050 'test-watch':547,932 'testdata':837,888 'testifylint':297 'testnam':486,500,537,556,1153 'text':367 'thelper':298 'thin':858 'tidi':602,608,611,753,787,795,945,948 'timeout':264 'timestamp':899 'today':884 'tool':51,91,103,201,226,233,239,245,507,523,1090 'toolchain':110,843 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-claude-skills' 'topic-clawhub' 'topic-erc-8004' 'topic-mpp' 'topic-openclaw' 'topic-skills' 'topic-solana' 'topic-x402' 'track':225 'transact':1245 'transport':828 'trigger':40 'trimpath':593 'true':320,326,359,374,376,385,398,746,770,784,1177 'type':324 'ubuntu':973,998,1062 'ubuntu-latest':972,997,1061 'unconvert':299 'unifi':99 'unit-tests.xml':1037,1056 'unparam':300 'unsort':405 'url':638,653 'use':19,58,976,979,987,1010,1013,1043,1065,1068,1172 'user':818 'user.go':825 'user_test.go':826 'usestdlibvar':301 'usetest':302 'v':1149 'v0.9':132 'v1':1112 'v1.13':143 'v2':12,1194 'v2.11':116,992 'v4':1045 'v4.19':164 'v6':978,981,1012,1015,1067,1070 'v9':989 'vendor':364 'verifi':604,614,949 'version':104,261,902,985,991,1006,1019,1021,1054,1074 'vuln':471 'vulner':467 'w':596,765,1122 'wastedassign':303 'watch':149,541,549,551,553,934,935,1218 'watch-clear':552 'whitespac':304 'wire':811 'without':421 'workflow':39,904 'wrapcheck':305,349 'write':31 'xml':152,1221 'yaml':260,740,954 'zero':54","prices":[{"id":"a3f25a5a-1a8c-4f5b-82bf-bfce4df88d9d","listingId":"c2e8997b-7229-4681-8c14-4b8751c73e82","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"tenequm","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-29T19:01:43.834Z"}],"sources":[{"listingId":"c2e8997b-7229-4681-8c14-4b8751c73e82","source":"github","sourceId":"tenequm/skills/go-dev","sourceUrl":"https://github.com/tenequm/skills/tree/main/skills/go-dev","isPrimary":false,"firstSeenAt":"2026-04-29T19:01:43.834Z","lastSeenAt":"2026-05-18T19:04:38.384Z"}],"details":{"listingId":"c2e8997b-7229-4681-8c14-4b8751c73e82","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"tenequm","slug":"go-dev","github":{"repo":"tenequm/skills","stars":28,"topics":["agent-skills","ai-agents","claude-code","claude-skills","clawhub","erc-8004","mpp","openclaw","skills","solana","x402"],"license":"mit","html_url":"https://github.com/tenequm/skills","pushed_at":"2026-05-14T18:04:24Z","description":"Agent skills for building, shipping, and growing software products","skill_md_sha":"c47521fcbb5cef01d781f225800671e0adcf6a5d","skill_md_path":"skills/go-dev/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/tenequm/skills/tree/main/skills/go-dev"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"go-dev","description":"Opinionated Go development setup with golangci-lint v2 + gofumpt + gotestsum + golang-migrate + just. Use when creating new Go projects, setting up linting/formatting/testing, configuring CI/CD pipelines, writing Justfiles, or migrating from Makefile-only workflows. Triggers on \"go project\", \"go mod init\", \"golangci-lint\", \"gofumpt\", \"gotestsum\", \"go test setup\", \"justfile go\", \"go migration\", \"go ci pipeline\", \"go lint setup\", \"go fmt\", \"go coverage\"."},"skills_sh_url":"https://skills.sh/tenequm/skills/go-dev"},"updatedAt":"2026-05-18T19:04:38.384Z"}}