hello.go
という名前の新しいファイルを作り、その中に以下のコードを記述します。go run hello.go
main
関数が定義されたmain
パッケージが作成されます。 パッケージは、関連するGoコードをグループ化する方法です。func
キーワードは、名前と本体で関数を定義する方法です。import "fmt"
では、印刷に使用する Println
関数を含むパッケージをインポートしています。fmt.Println
は副作用であり、送信する文字列はドメインです。func
を使用して新しい関数を再度作成しましたが、今回は定義に別のキーワードstring
を追加しました。 つまり、この関数は string
を返します。hello_test.go
という新しいファイルを作成します。ここで、Hello
関数のテストを記述しますgo test
と入力してください。テストが成功したら、おそらく以前のバージョンの Go を使っているのでしょう。しかし、Go 1.16 以降を使っている場合は、テストがまったく実行されない可能性があります。その代わり、ターミナルに次のようなエラーメッセージが表示されます。go mod init hello
と入力してください。そうすると、次のような内容の新しいファイルが作成されます。go
ツールに、あなたのコードに関する重要な情報を伝えます。もし、アプリケーションを配布する予定があるなら、コードがダウンロードできる場所や、依存関係の情報も含めるでしょう。今のところ、モジュールファイルは最小限のものであり、そのままにしておいても構いません。モジュールについて詳しく知りたいなら、Golangドキュメントのリファレンスを参照してください。これでGo 1.16 でもテストは実行されるはずなので、テストと Go の学習に戻ることができます。go test
や go build
といったコマンドを実行する前に、それぞれの新しいフォルダで go mod init SOMENAME
を実行する必要があります。go test
を実行します。合格したはずです! 確認するために、want
文字列を変更して、意図的にテストを中断してみてください。xxx_test.go
のような名前のファイルにある必要があります。Test
という単語で始まる必要があります。t *testing.T
*testing.T
型を使うには、他のファイルの fmt
と同じように import "testing"
が必要です。* testing.T
タイプのt
がテストフレームワークへのhook
(フック)であることを知っていれば十分なので、失敗したいときに t.Fail()
のようなことを実行できます。if
varName := value
で宣言しています。これにより、読みやすくするためにテストでいくつかの値を再利用できます。t.Errorf
t
でErrorf
method を呼び出しています。 f
は、プレースホルダー値%q
に値が挿入された文字列を作成できる形式を表します。 テストを失敗させたとき、それがどのように機能するかは明らかです。godoc -http :8000
を実行すると、ローカルでドキュメントを起動できます。 localhost:8000/pkg に移動すると、システムにインストールされているすべてのパッケージが表示されます。godoc
コマンドがない場合は、godoc
を含まない新しいバージョンのGo(1.14
以降)を使用している可能性があります no longer including godoc
。 go get golang.org/x/tools/cmd/godoc
を使用して手動でインストールできます。テストを最初に作成
します。go test
を実行すると、コンパイルエラーが発生するはずですHello
を変更する必要があります。Hello
関数を編集しますhello.go
はコンパイルに失敗します。コンパイルできるように"world"
を渡してください。name
引数を使用してテストに合格し、 Hello,
と連結してみましょうcommit
します。テストに裏打ちされた実用的なソフトウェアがあります。Hello
が呼び出されるたびに"Hello、"
文字列インスタンスを作成する手間を省くため、アプリケーションのパフォーマンスを向上させるはずです。"Hello、"
ではなく"Hello、World"
を出力することです。ちょうど
ではありません!t * testing.T
を渡す必要があるので、必要なときにテストコードを失敗させることができます。*testing.T
と *testing.B
の両方が満たすインターフェースである testing.TB
を受け入れると、テストやベンチマークからヘルパー関数を呼び出すことができるため、便利です。t.Helper()
は、このメソッドがヘルパーであることをテストスイートに伝えるために必要です。こうすることで、テストが失敗したときに報告される行番号は、テストヘルパーの中ではなく 呼び出された関数 の中を示します。これにより、他の開発者が問題を追跡しやすくなります。それでも理解できない場合は、コメントアウトし、テストを失敗させて、テスト出力を観察してください。Goのコメントは、コードに追加情報を加えるのに最適な方法です。この場合は、コンパイラに特定の行を無視するように指示する手っ取り早い方法です。t.Helper()
のコードをコメントアウトするには、行頭に2つのフォワードスラッシュ //
を追加してください。その行がグレーになるか、他のコードとは別の色に変わることで、コメントアウトされたことがわかるはずです。if
を使用してコードを修正しましょう。関連するテスト
があることを保証するだけでなく、テストの安全性を考慮してリファクタリングすることにより、優れたソフトウェアを設計する
ことを保証するのに役立ちます。fast
であることを確認し、テストを簡単に実行できるようにツールを設定することで、コードを記述するときにフローの状態に入ることができます。最初にテスト
。テストを実行しようとすると、1つではなく2つの引数を指定して Hello
を呼び出すため、コンパイラは文句を言うべきです_。Hello
に別の文字列引数を追加して、コンパイルの問題を修正しますhello.go
でHello
に十分な引数を渡さないというメッセージが表示されます。and
がコンパイルされます。if
を使用して、言語が"Spanish"
に等しいことを確認し、そうであればメッセージを変更します"magic"
文字列は、その一部が繰り返されます。自分で試してリファクタリングしてください。変更を加えるたびに、テストを再実行して、リファクタリングが何も壊していないことを確認してください。"French"
を渡すと、 "Bonjour、"
が得られることを表明するテストを作成しますswitch
if
ステートメントがある場合、代わりにswitch
ステートメントを使用するのが一般的です。後で言語サポートを追加したい場合は、 switch
を使用してコードをリファクタリングして読みやすくし、拡張性を高めることができます。amazing
関数を拡張するのがいかに簡単かがわかります。(prefix string)
を作成しました。prefix
という変数が作成されます。int
は0
で、string
の場合は""
です。return prefix
ではなくreturn
を呼び出すだけで、設定されているものを返すことができます。default
は、他のcase
ステートメントのいずれも一致しない場合に分岐します。Hello, world
からこんなに多くを得ることができると誰が知ってたのでしょう。if
、const
および switch
失敗するテストを作成してそれを確認する
要件に対応するrelevant
テストを作成し、失敗の説明を簡単に理解できることを確認しました。Hello()
から Hello("name")
から Hello("name", "French")
に、小さくて簡単な手順で進みました。