Fluent Interfaces

A Fluent Interface pattern enables method chaining by returning the object itself from methods. This results in readable and expressive code, resembling natural language. In Go, it’s often used in builders, configurations, or setup code.

Applicability

  • Builder patterns.
    Creating complex objects step-by-step (e.g., SQL queries, HTTP requests).

  • Configuration APIs.
    Setting up structs with multiple optional parameters.

  • Test DSLs.
    Creating expressive test cases.

Example

package main

import "fmt"

type QueryBuilder struct {
	query string
}

func NewQuery() *QueryBuilder {
	return &QueryBuilder{}
}

func (q *QueryBuilder) Select(fields string) *QueryBuilder {
	q.query += "SELECT " + fields + " "
	return q
}

func (q *QueryBuilder) From(table string) *QueryBuilder {
	q.query += "FROM " + table + " "
	return q
}

func (q *QueryBuilder) Where(condition string) *QueryBuilder {
	q.query += "WHERE " + condition + " "
	return q
}

func (q *QueryBuilder) Build() string {
	return q.query
}

func main() {
	q := NewQuery().Select("*").From("users").Where("age > 18").Build()
	fmt.Println(q)
	// Output: SELECT * FROM users WHERE age > 18
}

This site is open source! You can contribute or suggest changes by editing the GitHub repository.
Copyright © 2025. Distributed by an MIT license.