Create a gist now

Instantly share code, notes, and snippets.

@suzuken /1.md Secret
Created Aug 2, 2016

What would you like to do?

課題1 手続きの基礎

n番目のフィボナッチ数を返す手続き fib を実装してください。以下は実装のスタブです。

// fib.go
package main

func fib(n int) int {
	// ...
}

func main() {
}

例えば以下のように利用できることとします。

> fib(0)
0
> fib(1)
1
> fib(10)
55

整数以外の値や負の値が与えられた場合については適宜考えて処理するようにしてください。


発展課題その1

上記の手続き fib に対するユニットテストを書いてください。

// fib_test.go
package main

import (
	"testing"
)

func TestFib(t *testing.T) {
	// ...
}

上記のテストが go test -v をパスすることを確かめましょう。


発展課題その2

実装した 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の実行環境がちゃんとつくれているか、コーディング環境がちゃんと整っているかをみています。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment