エンジニア採用担当がプログラミング頑張る話【14日目/2ヶ月間】
こんにちは、@hiroki_maekawaです。
昨日に引き続き、今日もGoのテストコードについて勉強していきたいと思います。また、「サードパーティ製のライブラリを使うときはgo modulesを使って管理するようにしましょう。他の人がcloneしてきたときに困ります。」というアドバイスも頂いたため、go modulesについても調べていきたいと思います。
今日の目標
・推奨されているGoのテストコードを理解する
・推奨されている方法でGoのテストコードを書く
・go modulesを使ってサードパーティ製のライブラリを管理する
1. 推奨されているGoのテストコードを理解する
昨日読んでいたコードの中に見たことのない表現方法を見つけ、配列と構造体が絡んでることは分かったのですが、 {name string} の意味が分からず質問しました。
tests := []struct {
name string
}
すると、これは下記コードを省略して書いているそうで。。(こんな書き方ができてしまうのか。。)
上のコードは構造体の定義を直接行っていることが分かりました。
type tests struct {
name string
}
[]tests{}
ここで、「構造体と配列はデータや値をまとめるって意味で考え方が似てるなぁ」と思ったので、エンジニアの人は何を意識して構造体や配列を使っているか、質問してみました。
すると、「どっちもまとまりをもたせるんだけど、forを使いたかったら配列」と今のうちは覚えておいて問題ないと言われたので、備忘録として残しておきます。
2. 推奨されている方法でGoのテストコードを書く
これまで学んだことを踏まえ、ループ処理を使ってAdd関数のテストコードを書いてみました。
package main
import (
"testing"
)
func TestAdd(t *testing.T) {
//testsにtest1, 2, 3を配列する
tests := []struct {
result, expected int
}{
//test1
{Add(3, 5), 8},
//test2
{Add(2, 4), 6},
//test3
{Add(1, 3), 4},
}
//testsをループ処理する
for _, t := range tests {
if Add(t.result) != t.expected {
t.Errorf("failed test:result was %s, but expected %s\n", c.result, c.expected)
}
}
}
@Sueken51さんにレビューをお願いしたので、後程内容を確認したいと思います。
3. go modulesを使ってサードパーティ製のライブラリを管理する
「サードパーティ製のライブラリを使うときはgo modulesを使って管理するようにしましょう。他の人がcloneしてきたときに困ります。」ということで、まずは用語から理解を試みました。
【用語】サードパーティー製のライブラリ=コマンドからインストールしないと使えないライブラリ(今回の場合はgoquery)と理解。
【用語】cloneしてくる=ある指定したディレクトリに、元のリポジトリと同じものを複製すると理解。
【用語】go modulesとは、Go言語の依存モジュール管理ツールであり、依存モジュールの自動検知、依存モジュールのバージョン固定、バージョンアップ検知などを行ってくれるみたいです。
→Go modulesを使うことで、今そのディレクトリ内で使われているサードパーティー製のライブラリがどれか、また何のバージョンか知ることができると理解。
・go modulesの使い方
上記サイトを参考に、go.modに依存モジュールを表示しました。
module example.com/go-mod-test
go 1.14
require (
github.com/PuerkitoBio/goquery v1.5.1
github.com/go-sql-driver/mysql v1.5.0
)
また@Sueken51さんに質問したことで、「自分のファイルを他の人がcloneする時、go mod installすれば一発で必要なライブラリが揃うから便利。」であることも理解。
今日できるようになったこと
・推奨されている方法でGoのテストコードを書く
・配列と構造体の区別
・Go Modulesの使用
さいごに
本日ミーティングがあり、今週でスクレイピングする→そのデータをCSVファイルに入れる→MySQLに入れる→テストの基本的な書き方を理解する。ところまでいけたので、来週は下記をやっていくことになりました。
・RestfulAPIの構築
・http経由でデータのやりとり
・golangからmysqlに接続
また、「コードレビューの量が学習速度にも比例してくる」というアドバイスを頂いたので、来週はより頻繁にコードレビューをお願いしていこうと思います。
それでは引き続き頑張っていこうと思います。
それではまた!