Agent skill

model-usage

Working with model instances and fields

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/model-usage

SKILL.md

Using Models

Models provide thread-safe field access through typed methods. All operations use .Set() and .Get() patterns.

Creating Model Instances

Basic Constructor

go
// Create new model instance
user := user.New()

Typed Constructor

For specific types (like joined models):

go
// Create a new model instance for a specific type
joinedUser := user.NewType[*user.JoinedUser]()

Setting Field Values

All fields use .Set(value) method:

go
user.Name.Set("Alice")
user.Email.Set("[email protected]")
user.Age.Set(30)
user.Status.Set(constants.StatusActive)

Getting Field Values

All fields use .Get() method:

go
name := user.Name.Get()      // "Alice"
email := user.Email.Get()    // "[email protected]"
age := user.Age.Get()        // 30
status := user.Status.Get()  // constants.StatusActive

Working with Struct Fields

Struct fields (JSONB columns) have additional methods:

Setting Struct Values

go
type Bookmarks struct {
    FavoriteID types.UUID `json:"favorite_id"`
    RecentIDs  []types.UUID `json:"recent_ids"`
}

user.Bookmarks.Set(&Bookmarks{
    FavoriteID: uuid1,
    RecentIDs:  []types.UUID{uuid2, uuid3},
})

Getting Struct Values

go
// .Get() returns value and error
bookmarks, err := user.Bookmarks.Get()
if err != nil {
    return err
}

// .GetI() ignores errors (use when error checking not needed)
bookmarks := user.Bookmarks.GetI()

Field Types Reference

Field Type Go Type Database Type Use Case
StringField string text Text/string columns
UUIDField types.UUID uuid UUID columns
IntField int integer/smallint Integer/boolean (0/1) columns
DecimalField decimal.Decimal numeric Decimal/numeric columns
IntConstantField[T] T (int-based) smallint Enum/constant fields
StructField[T] T jsonb JSONB/struct columns

Thread Safety

All field operations are thread-safe by default. Models use internal mutexes to protect concurrent access.

go
// Safe to use from multiple goroutines
go user.Name.Set("Alice")
go user.Email.Set("[email protected]")

Common Patterns

Updating Multiple Fields

go
user := user.New()
user.Name.Set("Alice")
user.Email.Set("[email protected]")
user.Age.Set(30)
user.Status.Set(constants.StatusActive)

err := user.Save(ctx)
if err != nil {
    return err
}

Reading and Modifying

go
user, err := user.GetByID(ctx, userID)
if err != nil {
    return err
}

// Modify fields
currentAge := user.Age.Get()
user.Age.Set(currentAge + 1)

err = user.Save(ctx)
if err != nil {
    return err
}

Working with Optional Fields

Fields with null:"true" can be set to nil:

go
// Set to nil
user.MiddleName.SetNull()

// Check if nil
user.MiddleName.IsNull()

File Organization Standards

  • queries.go - All specific queries
  • functions.go - All model functions (not methods)
  • Methods - Use pointer receivers with this as the receiver variable

Related Skills

  • model-queries - Building database queries
  • model-conventions - Standards and field type reference

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results