開発環境
- macOS High Sierra - Apple (OS)
- Emacs (Text Editor)
- Go (プログラミング言語)
- Introducing Go: Build Reliable, Scalable Programs Caleb Doxsey (著) (参考書籍)
Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の5章(構造体、共用体、ビットフィールド - 独自の構造を使う)、金庫破り(p. 243)をGoで取り組んでみる。
金庫破り(p. 243)
コード(Emacs)
package main import "fmt" const ( lemon int = iota lime ) type lemonLime struct { which int lemon float64 limePieces int } type margarita struct { tequila float64 cointreau float64 lemonLime } func (m margarita) p() { fmt.Printf("%2.1f単位のテキーラ\n%2.1f単位のコアントロー\n", m.tequila, m.cointreau) switch m.which { case lemon: fmt.Printf("%2.1f単位のジュース\n", m.lemon) case lime: fmt.Printf("%d切れのライム\n", m.limePieces) } } func main() { m1 := margarita{2.0, 1.0, lemonLime{which: lemon, lemon: 2.0, limePieces: 0}} m1.p() m2 := margarita{2.0, 1.0, lemonLime{lemon, 0.5, 0}} m2.p() m3 := margarita{2.0, 1.0, lemonLime{which: lime, limePieces: 1, lemon: 0}} m3.p() }
入出力結果(Terminal)
$ go run sample6.go 2.0単位のテキーラ 1.0単位のコアントロー 2.0単位のジュース 2.0単位のテキーラ 1.0単位のコアントロー 0.5単位のジュース 2.0単位のテキーラ 1.0単位のコアントロー 1切れのライム $
Goには共用体(union)が無いからとりあえずstructとiotaとswitchによる場合わけでC言語と同様の機能を実装してみたけど、C言語の共用体と同様にメモリーを節約できる、他に何かGoらしい方法があるのかも。
0 コメント:
コメントを投稿