playbook/antigravity-awesome-skills/skills/ecl-harness-engineer/references/adapters/go.md

7.0 KiB

adapter
language display_name version detection commands package_manager route_detection import_analysis layer_conventions dependency_detection linter naming ci
go Go 1.0
files confidence
go.mod
go.sum
0.95
build test lint lint_arch format start dev
go build ./... go test ./... golangci-lint run make lint-arch gofmt -w . null null
detection default install_command
go go mod download
server_indicators cli_indicators frontend_indicators patterns
pattern description frameworks
http.ListenAndServe|http.Server{|.Listen( Standard library HTTP server
net/http
pattern description frameworks
gin.Default|gin.New Gin web framework
gin
pattern description frameworks
chi.NewRouter|chi.NewMux Chi router
chi
pattern description frameworks
echo.New() Echo web framework
echo
pattern description frameworks
mux.NewRouter Gorilla Mux router
gorilla/mux
pattern description frameworks
fiber.New() Fiber web framework
fiber
pattern description frameworks
github.com/spf13/cobra Cobra CLI framework
cobra
pattern description frameworks
github.com/urfave/cli urfave/cli framework
urfave/cli
pattern description frameworks
flag.Parse()|flag.String( Standard library flags
flag
type regex groups frameworks
route r.(Get|Post|Put|Delete|Patch|Head|Options)\s*(\s*["\x27]([^"\x27]+)["\x27]
method
path
chi
type regex groups frameworks
route .(GET|POST|PUT|DELETE|PATCH)\s*(\s*["\x27]([^"\x27]+)["\x27]
method
path
gin
type regex groups frameworks
route e.(GET|POST|PUT|DELETE|PATCH)\s*(\s*["\x27]([^"\x27]+)["\x27]
method
path
echo
type regex groups frameworks
route .HandleFunc\s*(\s*["\x27]([^"\x27]+)["\x27].*).(Methods)\s*(\s*["\x27]([^"\x27]+)["\x27])
path
_
method
gorilla/mux
type regex groups frameworks
route http.HandleFunc\s*(\s*["\x27]([^"\x27]+)["\x27]
path
net/http
type regex groups frameworks
command &cobra.Command\s*{\s*Use:\s*["\x27]([^"\x27\s]+)
command_name
cobra
list_packages import_pattern source_extensions module_root_file
go list -json ./... "([^"]+)"
.go
go.mod
patterns
layer paths description
0
internal/types
types
domain
model
entity
Pure types, zero internal imports
layer paths description
1
internal/utils
utils
pkg/utils
lib
Utilities, depend only on types
layer paths description
2
internal/core
core
internal/service
service
Business logic, depend on types + utils
layer paths description
3
internal/handler
handler
api
internal/api
HTTP/gRPC handlers, depend on core
layer paths description
4
cmd
Entry points, depend on everything
manifest_file databases services env_var_patterns
go.mod
pattern type default_port
github.com/jackc/pgx|github.com/lib/pq postgres 5432
pattern type default_port
github.com/go-sql-driver/mysql mysql 3306
pattern type default_port
go.mongodb.org/mongo-driver mongodb 27017
pattern type default_port
github.com/go-redis/redis|github.com/redis/go-redis redis 6379
pattern type default_port
github.com/mattn/go-sqlite3|modernc.org/sqlite sqlite 0
pattern type default_port
github.com/segmentio/kafka-go|github.com/IBM/sarama kafka 9092
pattern type default_port
github.com/rabbitmq/amqp091-go|github.com/streadway/amqp rabbitmq 5672
pattern type default_port
github.com/nats-io/nats.go nats 4222
pattern type default_port
github.com/elastic/go-elasticsearch elasticsearch 9200
pattern
os.Getenv("([^"]+)")
pattern
os.LookupEnv("([^"]+)")
pattern
viper.\w+("([^"]+)")
template_section script_extension run_command
go-linter .go go run scripts/lint-deps.go
file_pattern test_pattern directory_style
^[a-z][a-z0-9_]*.go$ ^[a-z][a-z0-9_]*_test.go$ snake_case
github_actions
image setup_steps cache_paths
golang:1.22
uses: actions/setup-go@v5 with: go-version: '1.22'
~/go/pkg/mod
~/.cache/go-build

Go Adapter

Server Start Command Inference

Priority order for detecting the server start command:

  1. Existing harness/config/environment.json startup command, if present
  2. cmd/server/main.go exists → go run cmd/server/main.go
  3. cmd/api/main.go exists → go run cmd/api/main.go
  4. main.go at root with http import → go run main.go
  5. Fail with actionable error

CLI Binary Inference

  1. cmd/cli/main.go exists → go build -o bin/cli cmd/cli/main.go
  2. cmd/<name>/main.go exists → go build -o bin/<name> cmd/<name>/main.go
  3. main.go at root with cobra/flag import → go build -o bin/app .

Testing Patterns

  • Unit tests: *_test.go files alongside source
  • Integration tests: //go:build integration build tag → go test -tags=integration ./...
  • Table-driven tests are idiomatic

Common Frameworks

Framework Detection Pattern Route Style
chi github.com/go-chi/chi r.Get("/path", handler)
gin github.com/gin-gonic/gin r.GET("/path", handler)
echo github.com/labstack/echo e.GET("/path", handler)
fiber github.com/gofiber/fiber app.Get("/path", handler)
gorilla/mux github.com/gorilla/mux r.HandleFunc("/path", handler).Methods("GET")
net/http stdlib http.HandleFunc("/path", handler)

Structured Logging

Go projects should use structured loggers. Common patterns to detect:

  • go.uber.org/zapzap.String(), zap.Int()
  • log/slog (stdlib) → slog.Info(), slog.With()
  • github.com/rs/zerologlog.Info().Str().Msg()
  • github.com/sirupsen/logruslogrus.WithFields()

Unstructured patterns to flag: log.Printf, log.Println, log.Fatalf, fmt.Printf (in non-CLI code)