見出し画像

エンジニア採用担当がプログラミング頑張る話【14日目/2ヶ月間】

こんにちは、@hiroki_maekawaです。

昨日に引き続き、今日もGoのテストコードについて勉強していきたいと思います。また、「サードパーティ製のライブラリを使うときはgo modulesを使って管理するようにしましょう。他の人がcloneしてきたときに困ります。」というアドバイスも頂いたため、go modulesについても調べていきたいと思います。

今日の目標

・推奨されているGoのテストコードを理解する
・推奨されている方法でGoのテストコードを書く
・go modulesを使ってサードパーティ製のライブラリを管理する


1. 推奨されているGoのテストコードを理解する

スクリーンショット 0032-06-07 17.38.46

昨日読んでいたコードの中に見たことのない表現方法を見つけ、配列と構造体が絡んでることは分かったのですが、 {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に接続

また、「コードレビューの量が学習速度にも比例してくる」というアドバイスを頂いたので、来週はより頻繁にコードレビューをお願いしていこうと思います。
それでは引き続き頑張っていこうと思います。

それではまた!

いいなと思ったら応援しよう!