Compare commits

...

1 Commits

Author SHA1 Message Date
user
8fc81c3774 go styleguide: require Stringer for custom string wrapper types
Custom string-based types (e.g. ImageID, ContainerID) must implement
fmt.Stringer. Use .String() at SDK/library boundaries instead of
string(v) for explicit, grep-able conversions.
2026-02-23 11:54:39 -08:00

View File

@ -423,6 +423,29 @@ last_modified: 2026-02-22
[github.com/bcicen/go-units](https://github.com/bcicen/go-units) for [github.com/bcicen/go-units](https://github.com/bcicen/go-units) for
temperatures (and others). The type system is your friend, use it. temperatures (and others). The type system is your friend, use it.
1. When defining custom string-based wrapper types (e.g. `type ImageID string`,
`type ContainerID string`), always implement the `fmt.Stringer` interface.
At SDK and library boundaries, use `.String()` instead of `string(v)` to
convert the value to a plain string. This makes the conversion explicit,
grep-able, and ensures a consistent pattern across the codebase.
Example:
```go
type ImageID string
func (id ImageID) String() string {
return string(id)
}
// At SDK/library boundaries:
// Good:
client.PullImage(ctx, imageID.String())
// Bad:
client.PullImage(ctx, string(imageID))
```
1. Once you have a working program, run `go mod tidy` to clean up your `go.mod` 1. Once you have a working program, run `go mod tidy` to clean up your `go.mod`
and `go.sum` files. Tag a v0.0.1 or v1.0.0. Push your `main` branch and and `go.sum` files. Tag a v0.0.1 or v1.0.0. Push your `main` branch and
tag(s). Subsequent work should happen on branches so that `main` is "always tag(s). Subsequent work should happen on branches so that `main` is "always