What problem does it solve? Go developers often over-engineer type hierarchies with large interfaces, premature abstractions, and inconsistent receiver choices, leading to rigid code that is hard to test and maintain. This Skill provides concrete rules for composing small interfaces, embedding structs, and choosing pointer versus value receivers. ## Core Features & Use Cases - Type Design Workflow: Step-by-step guidance for designing new Go types, from starting concrete to extracting interfaces only when a second implementation or testability requirement appears. - Design Auditing: A review checklist that flags oversized interfaces, bare type assertions, missing field tags, mixed receiver styles, and non-copyable structs lacking noCopy guards. - Reference Tables: Quick lookups for standard library interfaces, field tag directives (json, db, yaml, xml, validate), and pointer versus value receiver decision criteria. - Use Case: When building a UserService that depends on a database, define a small UserStore interface in the consumer package, return the concrete *UserService from its constructor, and add a compile-time check so tests can inject mocks without a real database. ## Quick Start Ask the assistant to review your Go package's type design using the go-structs-interfaces guidelines and fix any oversized interfaces or bare type assertions.