構造体のコンストラクタ(ファクトリ関数)を定義する

Go 言語には構造体のコンストラクタ用の文法は用意されていません。 通常の関数の形で構造体のファクトリ関数を実装します。 ただ、簡単なプログラムであれば、下記のような初期化リストを使ったオブジェクト生成で間に合ってしまいます。

b := Book{Title: "Title", Price: 2500}

任意のパラメータからオブジェクトを生成できるようにしたい場合は、New で始まる名前のファクトリ関数を作成し、構造体のポインタを返す のが慣例となっています。

book/book.go
package book

type Book struct {
	Title  string
	Author string
	Price  int
}

func NewAuthorlessBook(title string) *Book {
	return &Book{
		Title:  title,
		Author: "Unknown Author",
		Price:  100,
	}
}

上記では、book パッケージの中で Book 構造体とそのファクトリ関数を定義してみました。 外部の main パッケージから使用する場合は、下記のような感じのコードになります。

main.go
package main

import "fmt"
import "local.packages/book"

func main() {
	b := book.NewAuthorlessBook("The World")
	fmt.Printf("%+v\n", b)
}
実行結果
$ go run main.go
&{Title:The World Author:Unknown Author Price:100}