Token导航 LogoToken导航TokenDH.com
效率需要联网clawhub未标认证来源可访问clear审计提醒

golang-namingGo naming 命令行

Agent Skill

golang-naming 用于记录任务执行中的错误、用户纠正、经验和能力缺口,适合在 OpenClaw 中希望让 Agent 持续沉淀问题、修正和最佳实践时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

4,253

周安装

179

GitHub Stars

公开资料未说明

下载量

1,489
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:golang-naming(Go naming 命令行)
来源仓库:https://github.com/samber/golang-naming
安装命令:
openclaw skills install golang-naming
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install golang-naming

简介

golang-naming 提供 Go 命名约定的完整规范和指导。

  • 适合在 OpenClaw 中统一包名、接口和函数命名时使用。
  • 涵盖布尔值、getter/setter 和接收器命名规则。
  • 安装命令:openclaw skills install golang-naming。
  • 建议确认权限范围、维护状态及是否会触发重命名或代码扫描。

SKILL.md

name
golang-naming
description
Go (Golang) naming conventions — covers packages, constructors, structs, interfaces, constants, enums, errors, booleans, receivers, getters/setters, functional options, acronyms, test functions, and subtest names. Use this skill when writing new Go code, reviewing or refactoring, choosing between naming alternatives (New vs NewTypeName, isConnected vs connected, ErrNotFound vs NotFoundError, StatusReady vs StatusUnknown at iota 0), debating Go package names (utils/helpers anti-patterns), or asking about Go naming best practices. Also trigger when the user mentions MixedCaps vs snake_case, ALL_CAPS constants, Get-prefix on getters, or error string casing. Do NOT use for general Go implementation questions that don't involve naming decisions.
user-invocable
false
license
MIT
compatibility
Designed for Claude Code or similar AI coding agents, and for projects using Golang.
metadata
author
samber
version
1.1.1
openclaw
emoji
🏷️
homepage
https://github.com/samber/cc-skills-golang
requires
bins
install
[]
allowed-tools
Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent
Community default. A company skill that explicitly supersedes samber/cc-skills-golang@golang-naming skill takes precedence.

Go Naming Conventions

Go favors short, readable names. Capitalization controls visibility — uppercase is exported, lowercase is unexported. All identifiers MUST use MixedCaps, NEVER underscores.

"Clear is better than clever." — Go Proverbs "Design the architecture, name the components, document the details." — Go Proverbs

To ignore a rule, just add a comment to the code.

Quick Reference

ElementConventionExample
Packagelowercase, single wordjson, http, tabwriter
Filelowercase, underscores OKuser_handler.go
Exported nameUpperCamelCaseReadAll, HTTPClient
UnexportedlowerCamelCaseparseToken, userCount
Interfacemethod name + -erReader, Closer, Stringer
StructMixedCaps nounRequest, FileHeader
ConstantMixedCaps (not ALL_CAPS)MaxRetries, defaultTimeout
Receiver1-2 letter abbreviationfunc (s *Server), func (b *Buffer)
Error variableErr prefixErrNotFound, ErrTimeout
Error typeError suffixPathError, SyntaxError
ConstructorNew (single type) or NewTypeName (multi-type)ring.New, http.NewRequest
Boolean fieldis, has, can prefix on fields and methodsisReady, IsConnected()
Test functionTest + function nameTestParseToken
Acronymall caps or all lowerURL, HTTPServer, xmlParser
Variant: contextWithContext suffixFetchWithContext, QueryContext
Variant: in-placeIn suffixSortIn(), ReverseIn()
Variant: errorMust prefixMustParse(), MustLoadConfig()
Option funcWith + field nameWithPort(), WithLogger()
Enum (iota)type name prefix, zero-value = unknownStatusUnknown at 0, StatusReady
Named returndescriptive, for docs only(n int, err error)
Error stringlowercase (incl. acronyms), no punctuation"image: unknown format", "invalid id"
Import aliasshort, only on collisionmrand "math/rand", pb "app/proto"
Format funcf suffixErrorf, Wrapf, Logf
Test table fieldsgot/expected prefixesinput string, expected int

MixedCaps

All Go identifiers MUST use MixedCaps (or mixedCaps). NEVER use underscores in identifiers — the only exceptions are test function subcases (TestFoo_InvalidInput), generated code, and OS/cgo interop. This is load-bearing, not cosmetic — Go's export mechanism relies on capitalization, and tooling assumes MixedCaps throughout.

// ✓ Good
MaxPacketSize
userCount
parseHTTPResponse

// ✗ Bad — these conventions conflict with Go's export mechanism and tooling expectations
MAX_PACKET_SIZE   // C/Python style
max_packet_size   // snake_case
kMaxBufferSize    // Hungarian notation

Avoid Stuttering

Go call sites always include the package name, so repeating it in the identifier wastes the reader's time — http.HTTPClient forces parsing "HTTP" twice. A name MUST NOT repeat information already present in the package name, type name, or surrounding context.

// Good — clean at the call site
http.Client       // not http.HTTPClient
json.Decoder      // not json.JSONDecoder
user.New()        // not user.NewUser()
config.Parse()    // not config.ParseConfig()

// In package sqldb:
type Connection struct{}  // not DBConnection — "db" is already in the package name

// Anti-stutter applies to ALL exported types, not just the primary struct:
// In package dbpool:
type Pool struct{}        // not DBPool
type Status struct{}      // not PoolStatus — callers write dbpool.Status
type Option func(*Pool)   // not PoolOption

Frequently Missed Conventions

These conventions are correct but non-obvious — they are the most common source of naming mistakes:

Constructor naming: When a package exports a single primary type, the constructor is New(), not NewTypeName(). This avoids stuttering — callers write apiclient.New() not apiclient.NewClient(). Use NewTypeName() only when a package has multiple constructible types (like http.NewRequest, http.NewServeMux).

Boolean struct fields: Unexported boolean fields MUST use is/has/can prefix — isConnected, hasPermission, not bare connected or permission. The exported getter keeps the prefix: IsConnected() bool. This reads naturally as a question and distinguishes booleans from other types.

Error strings are fully lowercase — including acronyms. Write "invalid message id" not "invalid message ID", because error strings are often concatenated with other context (fmt.Errorf("parsing token: %w", err)) and mixed case looks wrong mid-sentence. Sentinel errors should include the package name as prefix: errors.New("apiclient: not found").

Enum zero values: Always place an explicit Unknown/Invalid sentinel at iota position 0. A var s Status silently becomes 0 — if that maps to a real state like StatusReady, code can behave as if a status was deliberately chosen when it wasn't.

Subtest names: Table-driven test case names in t.Run() should be fully lowercase descriptive phrases: "valid id", "empty input" — not "valid ID" or "Valid Input".

Detailed Categories

For complete rules, examples, and rationale, see:

  • Packages, Files & Import Aliasing — Package naming (single word, lowercase, no plurals), file naming conventions, import alias patterns (only use on collision to avoid cognitive load), and directory structure.
  • Variables, Booleans, Receivers & Acronyms — Scope-based naming (length matches scope: i for 3-line loops, longer names for package-level), single-letter receiver conventions (s for Server), acronym casing (URL not Url, HTTPServer not HttpServer), and boolean naming patterns (isReady, hasPrefix).
  • Functions, Methods & Options — Getter/setter patterns (Go omits Get so user.Name() reads naturally), constructor conventions (New or NewTypeName), named returns (for documentation only), format function suffixes (Errorf, Wrapf), and functional options (WithPort, WithLogger).
  • Types, Constants & Errors — Interface naming (Reader, Closer suffix with -er), struct naming (nouns, MixedCaps), constants (MixedCaps, not ALL_CAPS), enums (type name prefix like StatusReady), sentinel errors (ErrNotFound variables), error types (PathError suffix), and error message conventions (lowercase, no punctuation).
  • Test Naming — Test function naming (TestFunctionName), table-driven test field conventions (input, expected), test helper naming, and subcase naming patterns.

Common Mistakes

MistakeFix
ALL_CAPS constantsGo reserves casing for visibility, not emphasis — use MixedCaps (MaxRetries)
GetName() getterGo omits Get because user.Name() reads naturally at call sites. But Is/Has/Can prefixes are kept for boolean predicates: IsHealthy() bool not Healthy() bool
Url, Http, Json acronymsMixed-case acronyms create ambiguity (HttpsUrl — is it Https+Url?). Use all caps or all lower
this or self receiverGo methods are called frequently — use 1-2 letter abbreviation (s for Server) to reduce visual noise
util, helper packagesThese names say nothing about content — use specific names that describe the abstraction
http.HTTPClient stutteringPackage name is always present at call site — http.Client avoids reading "HTTP" twice
user.NewUser() constructorSingle primary type uses New()user.New() avoids repeating the type name
connected bool fieldBare adjective is ambiguous — use isConnected so the field reads as a true/false question
"invalid message ID" errorError strings must be fully lowercase including acronyms — "invalid message id"
StatusReady at iota 0Zero value should be a sentinel — StatusUnknown at 0 catches uninitialized values
"not found" error stringSentinel errors should include the package name — "mypackage: not found" identifies the origin
userSlice type-in-nameTypes encode implementation detail — users describes what it holds, not how
Inconsistent receiver namesSwitching names across methods of the same type confuses readers — use one name consistently
snake_case identifiersUnderscores conflict with Go's MixedCaps convention and tooling expectations — use mixedCaps
Long names for short scopesName length should match scope — i is fine for a 3-line loop, userIndex is noise
Naming constants by valueValues change, roles don't — DefaultPort survives a port change, Port8080 doesn't
FetchCtx() context variantWithContext is the standard Go suffix — FetchWithContext() is instantly recognizable
sort() in-place but no InReaders assume functions return new values. SortIn() signals mutation
parse() panicking on errorMustParse() warns callers that failure panics — surprises belong in the name
Mixing With*, Set*, Use*Consistency across the codebase — With* is the Go convention for functional options
Plural package namesGo convention is singular (net/url not net/urls) — keeps import paths consistent
Wrapf without f suffixThe f suffix signals format-string semantics — Wrapf, Errorf tell callers to pass format args
Unnecessary import aliasesAliases add cognitive load. Only alias on collision — mrand "math/rand"
Inconsistent concept namesUsing user/account/person for the same concept forces readers to track synonyms — pick one name

Enforce with Linters

Many naming convention issues are caught automatically by linters: revive, predeclared, misspell, errname. See samber/cc-skills-golang@golang-linter skill for configuration and usage.

Cross-References

  • → See samber/cc-skills-golang@golang-code-style skill for broader formatting and style decisions
  • → See samber/cc-skills-golang@golang-structs-interfaces skill for interface naming depth and receiver design
  • → See samber/cc-skills-golang@golang-linter skill for automated enforcement (revive, predeclared, misspell, errname)

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

90.79%
按下载量换算1,352

安全审计

VirusTotal

通过

ClawScan

可疑

Static analysis

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills