Fluent immutable builders for golang
Switch branches/tags
Clone or download
lann Merge pull request #10 from lann/registry-mux
Wrap registry map access in RWMutex
Latest commit 47ae307 Aug 2, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore Initial commit Jan 17, 2014
.travis.yml Update .travis.yml Aug 2, 2018
LICENSE Create LICENSE Feb 16, 2018
README.md Update README.md Jan 28, 2014
builder_test.go Allow setting nil on appropriate fields Aug 29, 2014
example_test.go Tweak example Jan 19, 2014
registry.go Wrap registry map access in RWMutex Aug 2, 2018


Builder - fluent immutable builders for Go

GoDoc Build Status

Builder was originally written for Squirrel, a fluent SQL generator. It is probably the best example of Builder in action.

Builder helps you write fluent DSLs for your libraries with method chaining:

resp := ReqBuilder.
    Header("User-Agent", "Builder").

Builder uses immutable persistent data structures (these, specifically) so that each step in your method chain can be reused:

build := WordBuilder.AddLetters("Build")
builder := build.AddLetters("er")
building := build.AddLetters("ing")

Builder makes it easy to build structs using the builder pattern (surprise!):

import "github.com/lann/builder"

type Muppet struct {
    Name string
    Friends []string

type muppetBuilder builder.Builder

func (b muppetBuilder) Name(name string) muppetBuilder {
    return builder.Set(b, "Name", name).(muppetBuilder)

func (b muppetBuilder) AddFriend(friend string) muppetBuilder {
    return builder.Append(b, "Friends", friend).(muppetBuilder)

func (b muppetBuilder) Build() Muppet {
    return builder.GetStruct(b).(Muppet)

var MuppetBuilder = builder.Register(muppetBuilder{}, Muppet{}).(muppetBuilder)
    AddFriend("Dr. Honeydew").

=> Muppet{Name:"Beaker", Friends:[]string{"Dr. Honeydew"}}


Builder is released under the MIT License.