← スキル一覧に戻る

go-library
by JaimeStill
Architecture for hierarchical Claude context using plugins, skills, rules, and other features.
⭐ 0🍴 0📅 2026年1月9日
SKILL.md
name: go-library description: > Go library development patterns. Use when designing library APIs, implementing extensibility, or working on packages in pkg/ directories. Triggers: format extensibility, provider separation, capability composition, library scope, supplemental packages, public API design.
Go Library Development
When This Skill Applies
- Designing public library APIs
- Implementing extensibility patterns
- Working on pkg/ directories
- Creating reusable packages
- Defining library scope and boundaries
Principles
1. Format Extensibility Pattern
Enable new capabilities without modifying core library code.
// Define format interface in lower-level package
type Format interface {
Name() string
Marshal(v any) ([]byte, error)
Unmarshal(data []byte, v any) error
}
// Registry for formats
var formats = make(map[string]Format)
func RegisterFormat(f Format) {
formats[f.Name()] = f
}
func GetFormat(name string) (Format, bool) {
f, ok := formats[name]
return f, ok
}
// Implementations register themselves
func init() {
RegisterFormat(&JSONFormat{})
RegisterFormat(&XMLFormat{})
}
// Usage - no core library changes needed for new formats
format, ok := GetFormat("json")
if ok {
data, _ := format.Marshal(value)
}
2. Provider-Format Separation
Cleanly separate provider infrastructure from capability formats.
Provider Layer: Routes protocols to endpoints
│
▼
Format Layer: Converts requests/responses for specific API
│
▼
Protocol Layer: Defines protocol types and contracts
// Provider: handles connection, auth, routing
type Provider struct {
endpoint string
httpClient *http.Client
auth Authenticator
}
func (p *Provider) Send(req Request) (Response, error) {
// Handles HTTP mechanics, auth, retries
}
// Format: handles protocol-specific marshaling
type OpenAIFormat struct{}
func (f *OpenAIFormat) FormatRequest(msg Message) Request {
// Converts to OpenAI-specific format
}
func (f *OpenAIFormat) ParseResponse(resp Response) Message {
// Parses OpenAI-specific response
}
Key Insight: Providers don't know about format details; formats don't know about provider details.
3. Capability Composition
Models compose capabilities from registered formats via configuration.
type Model struct {
provider Provider
capabilities map[string]Capability
}
type Capability interface {
Name() string
Execute(ctx context.Context, input any) (any, error)
}
// Configuration specifies capabilities
type ModelConfig struct {
Provider string
Capabilities []string // e.g., ["chat", "embed", "vision"]
}
func NewModel(cfg ModelConfig) (*Model, error) {
m := &Model{
provider: getProvider(cfg.Provider),
capabilities: make(map[string]Capability),
}
for _, name := range cfg.Capabilities {
cap, ok := getCapability(name)
if !ok {
return nil, fmt.Errorf("unknown capability: %s", name)
}
m.capabilities[name] = cap
}
return m, nil
}
4. Library Scope Definition
Clearly document what the library provides and intentionally excludes.
// Package agent provides LLM integration primitives.
//
// Scope:
// - Protocol abstractions for LLM communication
// - Provider integration (Ollama, OpenAI, Azure)
// - HTTP transport and streaming
//
// Out of Scope (use supplemental packages):
// - Tool execution and function calling
// - Context management and memory
// - Multi-agent orchestration
// - Workflow composition
package agent
5. Supplemental Package Pattern
Guidelines for creating supplemental packages extending core libraries.
Core Library (v1.0.0)
├── Provides: Primitives, interfaces, basic implementations
└── Stable API, minimal dependencies
Supplemental Package (v0.x.x → v1.0.0)
├── Extends: Higher-level abstractions
├── Depends on: Core library interfaces
└── Pre-release versioning during validation
// Core: go-agents/pkg/agent
type Agent interface {
Execute(ctx context.Context, input string) (string, error)
}
// Supplemental: go-agents-orchestration/pkg/workflow
type Workflow struct {
agents []agent.Agent // Uses core interface
}
func (w *Workflow) Run(ctx context.Context, input string) (string, error) {
// Orchestrates multiple agents
}
Versioning Strategy:
- Start at v0.1.0 during development
- Iterate through v0.x.x for API refinement
- Graduate to v1.0.0 after API validation
Patterns
Functional Options
type Option func(*Client)
func WithTimeout(d time.Duration) Option {
return func(c *Client) {
c.timeout = d
}
}
func WithRetries(n int) Option {
return func(c *Client) {
c.retries = n
}
}
func NewClient(endpoint string, opts ...Option) *Client {
c := &Client{
endpoint: endpoint,
timeout: 30 * time.Second, // defaults
retries: 3,
}
for _, opt := range opts {
opt(c)
}
return c
}
// Usage
client := NewClient("https://api.example.com",
WithTimeout(10*time.Second),
WithRetries(5),
)
Interface Segregation
// Bad: Large interface
type Repository interface {
Create(ctx context.Context, e Entity) error
Read(ctx context.Context, id string) (Entity, error)
Update(ctx context.Context, e Entity) error
Delete(ctx context.Context, id string) error
List(ctx context.Context) ([]Entity, error)
Search(ctx context.Context, query string) ([]Entity, error)
Export(ctx context.Context, format string) ([]byte, error)
}
// Good: Segregated interfaces
type Reader interface {
Read(ctx context.Context, id string) (Entity, error)
}
type Writer interface {
Create(ctx context.Context, e Entity) error
Update(ctx context.Context, e Entity) error
Delete(ctx context.Context, id string) error
}
type Searcher interface {
Search(ctx context.Context, query string) ([]Entity, error)
}
// Compose as needed
type ReadWriter interface {
Reader
Writer
}
Constructor Validation
func NewService(cfg Config) (*Service, error) {
// Validate required fields
if cfg.Endpoint == "" {
return nil, errors.New("endpoint required")
}
// Apply defaults
if cfg.Timeout == 0 {
cfg.Timeout = 30 * time.Second
}
// Validate constraints
if cfg.MaxRetries < 0 {
return nil, errors.New("max retries must be non-negative")
}
return &Service{
endpoint: cfg.Endpoint,
timeout: cfg.Timeout,
retries: cfg.MaxRetries,
}, nil
}
Anti-Patterns
Leaking Implementation Types
// Bad: Returns concrete type
func NewParser() *JSONParser {
return &JSONParser{}
}
// Good: Returns interface
func NewParser() Parser {
return &jsonParser{}
}
Breaking Semver
// v1.0.0
func Process(input string) string
// v1.1.0 - WRONG: Breaking change in minor version
func Process(input string, opts Options) string
// v1.1.0 - CORRECT: Backward compatible
func Process(input string) string // Original preserved
func ProcessWithOptions(input string, opts Options) string
スコア
総合スコア
45/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
○言語
プログラミング言語が設定されている
0/5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です