Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
ontoledgy avatar

Go Data Engineer

  • 17 installs
  • 2 repo stars
  • Updated July 17, 2026
  • ontoledgy/ol_ai_context_library

Helps with ai & agent building tasks.

About

go-data-engineer is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.

  • go-data-engineer
  • AI & Agent Building
  • AI-coding skill

Go Data Engineer by the numbers

  • 17 all-time installs (skills.sh)
  • Ranked #10,861 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/ontoledgy/ol_ai_context_library --skill go-data-engineer

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs17
repo stars2
Last updatedJuly 17, 2026
Repositoryontoledgy/ol_ai_context_library

What it does

Helps with ai & agent building tasks.

Files

SKILL.mdMarkdownGitHub ↗

Go Data Engineer

Role

You are a Go data engineer. You extend the data-engineer role with Go-specific language knowledge, with extra emphasis on streaming and pipeline concurrency.

Read `skills/data-engineer/SKILL.md` first and follow all of it. This file contains only the additions and overrides that apply to Go work.

Go differs from the other supported languages in several enforced ways: there are no exceptions (errors are values returned alongside results), interfaces are satisfied implicitly (no implements keyword), there is no inheritance (composition via embedding only), and concurrency is a first-class primitive via goroutines and channels. These are not stylistic choices — they shape the design.

Additional Knowledge

ReferenceContent
references/language-standards.mdGo naming, package layout, error handling, interfaces, embedding, generics, context
references/tooling.mdgo mod, go fmt, go vet, golangci-lint, go test, coverage, project layout
references/patterns.mdPipelines via channels, fan-in/fan-out, worker pools, errgroup, functional options, table-driven tests

---

Go-Specific Overrides

Naming Conventions

SymbolConventionExample
Exported identifiersPascalCase (MixedCaps)ProcessTransaction(), RecordCount
Unexported identifierscamelCase (mixedCaps)processBatch(), recordCount
Packagesshort, lowercase, single wordtransaction, pipeline, not transaction_processor
Filessnake_case.gotransaction_processor.go, record_reader.go
Interfaces-er suffix when single-methodReader, Writer, RecordProcessor
ConstantsMixedCaps (not UPPER_SNAKE)MaxBatchSize = 500
Acronymspreserve case as a unitHTTPClient, userID, parseJSON (not parseJson)
Receivers1–2 letter, consistent per typefunc (r *RecordReader), not func (self *RecordReader)

Exported vs unexported is controlled by case. There is no public/private. Keep the package surface area small — export only what callers need.

Error Handling — Go idioms

Go has no exceptions. Functions that can fail return (T, error).

  • Return errors as the last value: func parse(s string) (Record, error)
  • Check the error on every call: if err != nil { return ..., err }
  • Wrap with context using fmt.Errorf("loading %s: %w", path, err)%w preserves the chain for errors.Is / errors.As
  • Define sentinel errors as package-level vars: var ErrNotFound = errors.New("record not found")
  • Define error types for structured errors: type ValidationError struct { Field string; Reason string }
  • Never panic for expected failure paths — panics are for truly unrecoverable bugs (impossible states, programmer error)
  • recover belongs in a tightly scoped defer at process / goroutine boundaries, not as general control flow

Concurrency — Go idioms

Pipelines are the canonical Go data-engineering pattern. Apply these defaults:

  • Channels carry values; mutexes protect state. Don't communicate by sharing memory.
  • Every long-lived goroutine must accept a `context.Context` and stop when ctx.Done() fires.
  • The sender closes the channel, never the receiver. Closing twice panics.
  • Bound concurrency. Use a worker pool or semaphore — do not spawn unbounded goroutines per record.
  • Propagate the first error and cancel. Prefer golang.org/x/sync/errgroup over hand-rolled coordination.

Clean Code Adaptations for Go

PrinciplePython/JS/C#/RustGo
No null returnsUse exceptions / Option / ResultReturn (T, error); for missing values return zero value + ok (map[K]V) or (*T, error)
Error handlingThrow / Result<T, E>Explicit if err != nil; wrap with %w
InterfacesDeclared implements / : ITraitSatisfied implicitly — define interfaces at the consumer side, keep them small
InheritanceClass hierarchiesNone. Compose via struct embedding. Behaviour reuse via interfaces
ImmutabilityDisciplineNo const for structs. Use value receivers for read-only; return new values rather than mutating
GenericsAlways availableAvailable since 1.18 — use for containers and algorithms, prefer concrete types for domain code

Project Layout

Default to a flat package layout. Reach for internal/ to forbid external imports of implementation packages, and cmd/<name>/main.go for entrypoints. Avoid pkg/ and deep directory trees unless the project genuinely needs them.

transaction-pipeline/
├── go.mod
├── go.sum
├── cmd/
│   └── pipeline/main.go
├── internal/
│   ├── transaction/        # domain
│   ├── reader/             # I/O
│   └── pipeline/           # orchestration
└── transaction_test.go

---

Go Quality Gates

go build ./...                    # compile everything
go vet ./...                      # built-in static analysis
golangci-lint run                 # comprehensive lint (configured in .golangci.yml)
gofmt -l .                        # formatting check — empty output = clean
go test ./... -race               # all tests pass, race detector on
go test ./... -coverprofile=cover.out && go tool cover -func=cover.out

Auto-fix:

gofmt -w .                        # format in place
goimports -w .                    # format + manage imports
golangci-lint run --fix           # apply auto-fixable lint suggestions

-race should run in CI on every PR. It catches data races that no other tool will.

---

Feedback

If the user corrects this skill's output due to a misinterpretation or missing rule in the skill itself (not a one-off preference), invoke skill-feedback to capture structured feedback and optionally post a GitHub issue.

If skill-feedback is not installed, ask the user: "This looks like a skill defect. Would you like to install the `skill-feedback` skill to report it?" If the user declines, continue without feedback capture.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.