- 課題提出方法は https://github.com/VG-Tech-Dojo/treasure2016-pre/blob/master/README.md を見てください。
answers/your-github-user-name/go/q1
以下にコードを配置してください。- コードは
gofmt
で整形して提出してください。 https://golang.org/cmd/gofmt/ - 課題1までできればいいですが、余裕あったら発展課題もやってください。そんな大変じゃないです、多分。
n番目のフィボナッチ数を返す手続き fib
を実装してください。以下は実装のスタブです。
// fib.go
package main
func fib(n int) int {
// ...
}
func main() {
}
例えば以下のように利用できることとします。
> fib(0)
0
> fib(1)
1
> fib(10)
55
整数以外の値や負の値が与えられた場合については適宜考えて処理するようにしてください。
上記の手続き fib
に対するユニットテストを書いてください。
// fib_test.go
package main
import (
"testing"
)
func TestFib(t *testing.T) {
// ...
}
上記のテストが go test -v
をパスすることを確かめましょう。
実装した fib
をコマンドラインアプリケーションとして便利につかえるようにしましょう。以下のようにして実行できるようにしてみてください。
$ go run fib.go 10
55
あるいは以下のようにしてもよいでしょう。
$ go build fib.go
$ ./fib 10
55
結果は標準出力に出すものとします。
- コマンドライン引数を取るには
os.Args
を使うと良いでしょう。 string
からint
の変換にはstrconv
を使います。- 標準出力は
fmt.Fprint(os.Stdout, ...)
などを使うと良いでしょう。
おおまかには以下のような形式になるでしょう。
package main
import (
"fmt"
"os"
"strconv"
)
func fib(n int) int {
// ...
}
func main() {
if len(os.Args) < 2 {
fmt.Fprint(os.Stderr, "do nothing\n")
os.Exit(1)
}
// ...
}
余談
q1
ディレクトリなんだからpackage q1
になるんじゃないのと思ったあなた、それでもいいです。そのかわり発展課題その2ではコマンドラインアプリケーションにするので、適当にディレクトリつくってmain
パッケージも作る必要があります。実際にはpackage q1
ないしpackage math
とかをつくるほうが現実的ではあります。- この課題はGoでコマンドラインアプリケーションを書くことのチュートリアルでもあります。需要がありそうだったらもうちょっと講義でもふれるかもしれません。Goでコマンドラインアプリケーション書いたりバッチ書くのおすすめです。
- ちなみにこの課題の目的はローカルでGoの実行環境がちゃんとつくれているか、コーディング環境がちゃんと整っているかをみています。