allfields

module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 28, 2022 License: MIT

README

allfields

allfields is a Go linter. It checks that all fields in the struct literal are set.

allfields checks only the struct literals with the //allfields comments just inside them. In the following example the linter will throw error because the Age field is not set while creating userAlice, but userBob will successfully pass the checks. To run the allfields linter use the command like go run github.com/subtle-byte/allfields/cmd/go-allfields path/to/packages.

type User struct {
    Name string
    Age int
}

func main() {
    userAlice := User{
        Name: "Alice",
        //allfields
    }
    userBob := User{
        Name: "Bob",
        Age:  20,
        //allfields
    }
}
Use cases

Developing backend services in Go we frequently meet the situation when we need to copy the data between structs. Let's imagine we write grpc server:

func (s *grpcServer) GetUser(ctx context.Context, req *api.GetUserRequest) (*api.GetUserResponse, error) {
	user := s.Service.GetUser(ctx, req.Id)
	return &api.GetUserResponse{
		Id: user.ID,		
		Name: user.Name,
		Age: user.Age,
		//allfields
	}, nil
}

In this example //allfields guarantees that if you extend API by adding fields to User (for example adding field CreatedAt) you will not forget to set this new field in GetUserResponse.

Directories

Path Synopsis
cmd
go-allfields command
internal
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL