やる気がストロングZERO

やる気のストロングスタイル

Go

Go echoでformのpost処理後のリダイレクトがうまく行かずにハマった

Go echoでformのpost処理後のリダイレクトがうまく行かずにハマったのでメモ やりたかったこと formデータをPOSTで受け取って処理したあと、一覧ページにリダイレクトしたかった。 func (w *WebApp) 登録処理(c echo.Context) error { // postパラメータを受…

dlvで実行中Processにアタッチしてデバッグ

Goでcuiアプリ作ってる。 ビジネスロジックはメソッドで切り出しているのでIDEの機能でテストコードから実行してデバッグしてたが、画面に近い部分のデバッグするの辛いなと思ってた。 以下のようにすれば動作中プロセスにデバッガをアタッチしてデバッグ可…

【Go】Gorpで[where in]をいい感じに書く方法

Gorpを使っていて以下のようなqueryを実行したい時がある。 select * from table where id in (1, 2, 4, 8); "1,2,4,8"は動的に変えたいのでプレースホルダーにしたい。 select * from table where id in ($1, $2, $3, $4); 今回指定したidは4つだったけど、…

【Golang】sql.Open(), Close()を呼ぶタイミング・場所について考えた

GoでDBアクセスする為のサンプルコードを探すとどこもこんな感じ func main() { # dbコネクション(pool)を取得 pool, err = sql.Open("driver-name", *dsn) if err != nil { // This will not be a connection error, but a DSN parse error or // another i…

Go echoでPOST複数パラメータをsliceで受け取る方法

postでidを以下の様に複数送った時、 id = 1 id = 2 Go echoでスライスで取得するには以下のようにすると取れた func (cont *Controller) Create(c echo.Context) error { ..... params, err := c.FormParams() if err != nil { //パラメータ取得に失敗 c.Er…

gomockを使って「N回目呼ばれたらエラーを返す」を実現する方法

mockを使ってのテストは主に「起こしにくいエラーを再現する」場合にのみ使っている。 gomockにて、「N回目呼ばれたらエラーを返す(それ以外は実際の処理が実行される)」モックの用意の仕方をメモする。 スタブを使う。 github.com ctrl := gomock.NewCont…

GoでもRubyのirbみたいにREPLを使いたい

Rubyのirbとか、rails_consoleが便利なので、Goでもそういうの出来ないか探したら作ってくれてた。 motemen.hatenablog.com インストールして、使いたいメソッドがあるパッケージをimportして使えば普通に使えた。 「実行したい処理のコードはあるけど、外部…

【Go】interface{}、reflectionについて調べたメモ

Goで「型は異なるが共通する処理(型が違うだけで、行いたいことは共通)」を書こうとしたとき、どうやればいいのかよくわからなかった。 C#だとジェネリクスとか使う感じのやつ。 Goだと引数をinterface{}でうけとって、reflectionを使ってなんやかんややる…

YouTubeで公開システム構築をやってみている

「俺が考える最強の契約管理システムを作る」というタイトルのYoutube動画を投稿している。 [再生リスト] 俺が考える最強の契約管理システムを作る - YouTube こんなん。 youtu.be 作業リポジトリも公開してます。 GitHub - mixmaru/my_contracts: 俺が考え…

【Go】nilチェックは value == nilだとダメな場合がある

Goのnilチェックで躓いたのでメモ。 nilチェックは value == nilだとだめな場合がある こんな挙動になる type Nameable interface { GetName() string } type Human struct { name string } func (h *Human) GetName() string { return h.name } func IsNilH…

scpコマンドの挙動でハマった(ちょっとだけGo)

Goを書いていてsshでファイル転送したかったが、Goでのいい感じのクライアントが見つからなかったので普通にscpコマンドを実行させることにしたが、 scpコマンドの挙動でハマった。 雑にメモ。 やりたいこと remoteの/var/data/ディレクトリの中身を localの…

【Go】gorpにdecimal型を認識させる

経緯 データベースライブラリにgorpを使ってみている。 gorpでは(gorpというより、database/sqlの範疇かも)Goのint型はDBのintと、GoのstringはDBのtextやvarcharと、みたいに自動的にマッピングされて意識しなくてもデータやり取りができる。 Goには標準…

Goのエラーハンドリングについて

したいこと なにかエラーが出た時に、ログから 「なにが発生したのか」 「どこで発生したのか?」 がわかるようにしたい。 Go標準のerrorはスタックトレース情報を持ってない errors.New("エラーメッセージ") これだとスタックトレース情報がない。 エラーが…

Goでdecimalを使う時に考えたこと(floatの精度について)

Goで金額計算するのでdecimal型を探したが、基本ライブラリには無いようなのでどうしようか悩んでいた。 基本ライブラリにmath.bigパッケージがあり、Floatの精度を自由に決められるようなものがあったのでそれで行けるかと思ってたけど(不必要に外部ライブ…

【Go】gorpを使ってDDDのRepositoryを書いた

goを使ったシステムにて、DBアクセス周りでgorpを使うことにしたので色々調査してDDDで言うところのrepositoryを書いた。 gorp GitHub - go-gorp/gorp: Go Relational Persistence - an ORM-ish library for Go gorpを選んだ理由 データ取得は「SQL文を直接…

【Go】インターフェースから具象型への型アサーション

インターフェースに依存させてコードを書いてると、テストで具象型として扱いたいケースが出てきたので方法を調べた。 参考) A Tour of Go value := <インターフェース型の変数>.(<具象型>) value, ok := <インターフェース型の変数>.(<具象型>) // この場合…