Skip to main content

Get full access to 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス and 60K+ other titles, with a free 10-day trial of O'Reilly.

There are also live events, courses curated by job role, and more.

1.6 関数のオプション引数

関数やメソッドを実装するとき、必要に応じてパラメーターを増減させて、柔軟なロジックを実装したいことがあります。Goの文法に可変長引数はありますが、引数の数は変更できても、それぞれの型は同一である必要があります。パラメーターの型にバリエーションがある場合は別の方法が必要です。 Goには、Pythonのようなキーワード引数といったオプション引数のための文法はありませんし、JavaやC++のような関数オーバーロードもありません。ですが、いくつかの標準ライブラリや人気のライブラリで使われている技法があります。

ここではうどん屋のオプションを題材に、Goで関数のオプション引数を実現する方法を紹介します。次のような、すべてのパラメーターを渡さなければならない関数があるとして、これをいかに使いやすいものにできるかが、本節のゴールです。

type Portion int

const (
	Regular Portion = iota // 普通
	Small                  // 小盛り
	Large                  // 大盛り
)

type Udon struct {
	men      Portion
	aburaage bool
	ebiten   uint
}

// 麺の量、油揚げ、海老天の有無でインスタンス作成
func NewUdon(p Portion, aburaage bool, ebiten uint) *Udon {
	return &Udon{
		men:      p,
		aburaage: aburaage,
		ebiten:   ebiten,
	}
}

// 海老天2本入りの大盛り
var tempuraUdon = NewUdon(Large, false, 2)

1.6.1 別名の関数によるオプション引数 ...

Get 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.

Don’t leave empty-handed

Get Mark Richards’s Software Architecture Patterns ebook to better understand how to design components—and how they should interact.

It’s yours, free.

Get it now
Cover of Software Architecture Patterns

Check it out now on O’Reilly

Dive in for free with a 10-day trial of the O’Reilly learning platform—then explore all the other resources our members count on to build skills and solve problems every day.

Start your free trial Become a member now