あいつの日誌β

働きながら旅しています。

Go

App Enigine に deploy しよとすると composite literal uses unkeyed fields と言われた件

Go

あらすじ ある日手元で開発したソースコードを App Engine にデプロイしようとするとエラーが出たときのお話です。 問題と解決策 問題となったのは以下のコード func NewNullString(s string) NullString { return NullString{sql.NullString{s, s != ""}} }…

okamuuu.com をはじめました。

現在 Google App Engine で Golang + React での開発を行っているのですが、学習曲線を高めるために同じ構成で Blog を作ってみました。 いろいろとはまるポイントがあって学ぶポイントが結構あったので折を見て共有したいと思います。とりあえずはてなブロ…

MySQL で sql.NullString なあいつを JSON に Marshalling する

Go

追記: c.Bind とかする時に type error が起きたりするので Unmarshal も追加 あらすじ MySQL で nullable なカラムレコードを入れるために struct の定義をこうしたらレコードには null が入らずに空文字が入ってしまいます。 Something.Code には Unique …

golang: gorm で 日付を定義したい

Go

User.birthday や Diary.ymd みたいな date 型を指定したい場合は struct を以下のようにすれば良いらしい。 Update するときは Query に hms つけた状態でも ymd だけ更新されます。 Find するときは ymd 形式に変えてあげればいいと思います。 package mai…

Golang: unsupported Scan, storing driver.Value type []uint8 into type *time.Time;

Go

そんなエラーが出た場合はたぶん parseTime をつけるのを忘れている - "username:password@/dbname" + "username:password@/dbname?charset=utf8&parseTime=True&loc=Local"

gin 入門(5)

Go

前回 CLI で記事を追加する機能を追加しました。 今回は SERVER から記事一覧と記事詳細を取得する処理を追加します。 取り急ぎ JSON を返す処理を追加する edit server/router.go: func AddRoute(r *gin.Engine, dbmap *gorp.DbMap) *gin.Engine { r.GET("/…

gin 入門(4)

Go

前回は CLI ツールを作成して記事の作成(タイトルのみ)を行えるようにしました。 今回は Markdown 形式で保存したテキストファイルから記事を作成するようにします。 仕様 Markdown 形式のファイルを読み込む DB には Markdown の形式のまま保存する(Javascr…

gin 入門(3)

Go

前回は WEB Layer のテストケースを考えました。 今回は CLI について考えます CLIの要件 あるディレクトリに Markdown 形式のファイルを記述しておき、そのファイルからブログ記事を生成する 仕様 とりあえず第三回では CLI の雛形を作ります。実際に Markd…

gin 入門(2)

Go

前回は DB Layer のテストケースを考えました。 今回は WEB Layer のテストケースを考えます。 web layer のテストケースを考える 巷の記事を読んでもイマイチ書き方が分からないので実際に gin のテストコードを参考にして web layer のテストケースを考え…

gin 入門(1)

Go

あらすじ Go 言語の WEB フレームワークである gin を使って WEB API の作り方を調べたのでまとめようと思います。 お断り たぶん全5回ぐらいの内容になると思うのですが、ちょっとまだ記事まとめ中なので、この記事自体をちょいちょい修正します。 完成した…

redigo memo

メモ package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { c, err := redis.Dial("tcp", ":6379") if err != nil { panic(err) } defer c.Close() c.Do("FLUSHALL") c.Do("RPUSH", "list-key", "item1") c.Do("RPUSH", "list-k…

Go language に入門する準備

Go

そろそろ 今年も終わりそうなのでとりあえず Go したい Ready? anyenv を使ってインストールする。anyenv を最新状態に変更する % cd ~/.anyenv % git pull install goenv % anyenv install goenv % exec $SHELL -l install go 1.3 % goenv install 1.3 % go…