Edited at

[プログラミング初心者向け]GoでFizzBuzz

More than 1 year has passed since last update.


Go言語でFizzBuzz

golangを使ってFizzBuzzのプログラムを買いていきたいと思います。

使用しているgoのバージョンは1.7.1です。


Go言語とは?

プログラミング言語の一つで2009年にgoogleから発表されました。

主な特徴としては、


軽量スレッディングのための機能、Pythonのような動的型付け言語のようなプログラミングの容易性


などがあります。 (wikipediaより引用)


FizzBuzzとは?

3の倍数でFizz 5の倍数でBuzz 3かつ5の倍数(つまり15の倍数)でFizzBuzzをコンソールに出力させるプログラミング問題です。

基本中の基本の問題ではありますが意外と奥が深い...


Hello worldから

まずは、goファイルを作っていきます。

go言語のファイルは.go拡張子で表現されます。

touch fizzbuzz.go

これで現在いるディレクトリにfizzbuzz.goというファイルが作成されたかと思います。

このファイルを編集してFizzBuzzのプログラムを書いていきます。

確認としてhelloworldのプログラムを書きます。


fizzbuzz.go

pakage main

import "fmt"

func main(){
fmt.Println("Hello, world!!")
}


まず、一行目のpackageについて

goのコードは全てpackageで構成されています。

packageとは、他の言語で言うところのクラスやモジュールに似たものです。

packageは一つ、もしくは複数の.goファイルから構成されていて、それぞれのファイルはそのpackageが何をするのかを決めています。

その下のimportでは何をしているのでしょうか?

それは、import文によってgoのパッケージを読み込んでいるのです。

fmtは入出力をするための関数が含まれているパッケージです。

これを読み込まないとfmt.Printlnは動きません。

では、実行してみましょう!

  go_practice git:(master) ✗ go run fizzbuzz.go                 

Hello, world!!

Hello,worldが出力されましたね。

ここでgoのコマンドについて少し解説します。

まず、go言語はコンパイル言語です。

コンパイルすることによってソースコードを機械語に翻訳し、コンピューターに命令を送っています。

run コマンドはファイルをコンパイルし、ファイルを実行します。

コンパイルしたファイルを実行せずに保存する場合はbuildコマンドを使います。

go build fizzbuzz.go

このコマンドによってファイルがコンパイルされfizzbuzzというバイナリファイルが生成されます。

実行する場合は、./fizzbuzzを入力します。

./fizzbuzz

Hello, world!!


FizzBuzzを書こう!

では本題のfizzbuzzのプログラムを買いていきましょう!

色々なやり方がありますが、今回はシンプルに条件分岐を用いた方法で実装していきます。


if文について

if文はif 条件式 と書いたときに条件が真であればブロック({})で囲まれた中身の命令を実行します。

偽であれば実行されません。

goでは if 条件部 {} という形式で書きます。


変数

試しに xの値が3のときに文字列"xは3です"と出力されるようにプログラムを書きます。

変数の宣言は、 var x string のように var 変数名 型と宣言します。

宣言するときに代入を行いたい場合は var x := value というようにします。


fizzbuzz.go

pakage main

import "fmt"

func main(){
var x := 3

if x == 3 {
fmt.Println("xは3です。")
}
}


go run fizzbuzz.go

xは3です。


ループ

go言語でループをさせいときは、for文を使えます。

ループも色々とあるのですがfor文を使っていきたいと思います。

for 初期化式;条件式;位置ループ終わったときの処理 {}

という風に書きます。


fizzbuzz

これだけでfizzbuzzを書くことができちゃいます。

※なお、ここでは100までの数字に対してfizzbuzzしていきたいと思います。


fizzbuzz.go

package main

import "fmt"

func main(){
for i := 1; i <= 100 ; i++ {
if i%3 == 0 && i % 5 == 0 {
fmt.Println("FizzBuzz")
} else if i%3 == 0 {
fmt.Println("Fizz")
} else if i%5 == 0 {
fmt.Println("Buzz")
} else {
fmt.Println(i)
}
}
}


出力は...

➜  go_practice git:(master) ✗ go run fizzbuzz.go                 (git)-[master]

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

うまくいきました!

いかがでしたでしょうか?

基本中の基本の問題なので簡単に解けたかもしれません。

しかし、意外とfizzbuzzだけでも言語の特徴が見えてくるので奥が深い問題だと思います。

これからもgoでアルゴリズム問題を解いていこうと思っているのでよろしければ見てくださいね!