2018年 08月の投稿を表示しています

Go 言語の練習に markdown のテーブルだけいい感じに調整するやつを作ってみた

作ったよ

sters/markdown-table-formatter: markdown-table-formatter

|hoge            |huga|
|--------------|------|
|its|confusing              |markdown|
|table   |so|crazy|table|.|

みたいなガタガタテーブルが書かれているテキストをキレイに揃えてくれるやつ。

|hoge |huga     |        |     | |
|-----|---------|--------|-----|-|
|its  |confusing|markdown|     | |
|table|so       |crazy   |table|.|

 

何も考えずにこんな要素が必要では?とテストを書いていって、それに合わせて実装をしていったので、同じことを何度もやっているような部分もあって、
アーキテクチャ的には再考の余地あり。

struct に中間データ的なものを閉じ込めてバケツリレーするのが簡単かなあ。
テストがいるので、ここからリファクタしがいありますね、って感じで。

 

書いてみて、ポインタとかまったく気にしなくて良いってことがわかってきた。
出番はほぼないのと、あっても波線出たときにどうにかする、ということだけを、とりあえず、それでよさそう。

リリースの配布

タグを設定すると Circle CI が動いてリリースが作られるようにしてみた。
(go get に必要なのかな?と思ったけどそういうわけではなかったみたい)

goreleaser を使ったリリースというタスクを作って、ワークフローで制御している。

goreleaser/goreleaser: Deliver Go binaries as fast and easily as possible

設定はここみて。

markdown-table-formatter/config.yml at master · sters/markdown-table-formatter

詰まったポイント

テスト時の assert を見やすくするために gopwt を使ってみたんですが、-cover したときにカバレッジが出なくなる問題があり、そこで無駄に詰まった。
gopwt のソースを調査するのはまたの機会にして、カバレッジ測定では gopwt を無効にした。

markdown-table-formatter/Makefile at master · sters/markdown-table-formatter

あと go get したときにそのままバイナリができる方法がわからなかった。ググってもそれっぽい回答が見つからない。。公式ドキュメントのどこかにいるのかなあ…

わからなかったので、リリースを作ってみたが違った ./main.go にして見たらバイナリが作られるようになった。
ディレクトリ切るとだめなんかな。いや、./formatter.go がいたからダメだったのかな、、
ドキュメントどこーー

そのほか

カバレッジ出ると楽しい。
100%にするのが完璧なテストというわけではないけど、そもそもココのテストできてなくね?とかが可視化されるの便利。

Go 言語に入門する

やるかやるか〜〜〜って思ってたけど、やっとやった。

A Tour of Go をやってみる

Go 言語の入門するにはとりあえず A Tour of Go をやると良いって噂を聞いたのでやってみる。

A Tour of Go

ブラウザ上で Go 言語のプログラムを書いて、そのまま実行できるスゴイやつ。
課題も途中で出てくるので、実際に動かしながら各種の理解を進められる。

とりあえずやってみての感想は interface と struct そして ポインタが絡むとよくわからんとなった。
もっとコード書いたらわかってくると思うので一旦雰囲気を理解するだけで。

あと標準パッケージがワカラン。このへんもやっていくしかない。

ただなんとなく、超便利有能関数群みたいなのが無いあたり、俺達のプログラムに必要なコードは俺達で組むんだ、みたいな意思を勝手に感じた。
パッケージは Github から直に入るのでどういうのがよく使われているのかまったくわかんない… awesome-go を見るのがとりあえずは良いかもしれない。

avelino/awesome-go: A curated list of awesome Go frameworks libraries and software

Go 言語のランタイムを入れる

Downloads - The Go Programming Language

Mac なら brew install go で入る。

GOPATH は設定してもしなくても良くて、設定しないと ~/go/ になる。特に移動する必要も感じなかったのでそのまま。
GOROOT は設定必要だよ!とか書いてある記事もあるが、現在に置いては不要らしい。

ghq をいれる

motemen/ghq: Remote repository management made easy

~/.gitconfig に ghq の設定を追記する。


[ghq]
root = $GOPATH/src/

ざっくり説明すると、リポジトリの管理をお手軽簡単にやるツール。

Go 言語のリポジトリをこねくりまわすとき GOPATH/src 以下で作業をする必要があるので、これを使って GOPATH/src に配置されるようにしておくと困らなくて良い。
(git clone して作業しようとしたら GOPATH/src におくんやで!みたいなエラーが出てちょっと困った)

Visual Studio Code を入れる

Visual Studio Code - Code Editing. Redefined

エディタ atom でも良かったんだけど、せっかくなので別のやつを試してみる。
個人でポチポチやってみるのに Gogland ほどのウルトラハイパフォーマンス IDE は一旦いらないんじゃなかろうかという気持ち。

拡張機能はとりあえずこの2つを。

  • Go
    • Go 言語サポートを追加する
  • Dracula Official
    • おすすめテーマ

Go を入れるだけで、裏で go ほげほげなコマンドを使った定義元ジャンプや整形や lint やデバッグまで色々多数用意される。
初めて Go を入れたときに必要な Go パッケージが go get されているかを自動で確認してくれて、無い場合はよろしくやってくれる。

GOPATH 以下が見れる GOLANG というタブ?がエクスプローラーの中に出ているので、ここからこのまま作業をしてもいいし、ディレクトリを開いて置いても良いと思う。

ディレクトリを開いたほうがターミナル起動時に、カレントディレクトリに移動してからやってくれるので便利。
GOPATH のもので見ると GOPATH を最初に開くので移動する手間あり。

----

とりあえずはこんなとこで。