golang

Datastore/Go の cannot load field xxxx into a xxx: no such struct field は Goon で回避できる

以下のブログに書いてある通り、 pospome.hatenablog.comDatastore は kind の property が struct の field に存在しないと ErrFieldMismatch というエラーが発生する。「datastore: cannot load field xxxx into a xxx: no such struct field」のエラーと…

GAE/Go の goon が出力するエラーを止める

goonの内部で以下のようなエラーが出力されていた。 ERROR: goon - goon.go:194 - pospome error エラーメッセージの「pospome error」は以下のように自分が用意した error なので、 このエラーを返しているどこかで goon がエラーログを出力しているみたい…

Goのシンプルさについて

LT資料です。 Goのシンプルさについて from pospome

golang + mysql の ORM を色々調べた感想とおすすめ

普段は GAE で golang を使っているけど、 golang で mysql 使ったことないってのもどうなのかな? と思ったので、 ちょっとしたサンプルアプリを通して mysql を使ってみようと思った。 で、ORM どーしーよーかなと思って、 色々調べた記録です。標準パッケ…

(継続的に追記)Datastore/Go のデータ設計のコツ

Datastoreを使っていて、 ある程度コツとか注意点みたいなものが分かってきたので、 まとめてみました。 継続的に追記していく予定です。間違っているところがあれば コメント or twitter で教えてください。Datastoreの entity, kind などの用語は理解して…

Datastore/GO で datastore: flattening nested structs leads to a slice of slices: field xxx

以下のエラーが出た。 datastore: flattening nested structs leads to a slice of slices: field xxx Datastore は以下のように struct をネストすることができるが、 type A struct { B []B } type B struct { Name string } 以下のようにネストした struc…

Go で cannot assign to xxx のエラー

ググると色々情報があるが、 日本語の情報がないので書いておく。https://play.golang.org/p/atdCt2Mken ↑ これを実行すると「cannot assign to struct field users[0].Connected in map」のエラーが出る。結論から言うと map が問題らしい。go - Why do I g…

Go のブランク識別子を利用した import による pakcage への副作用

ORMを調べていると以下のような import を見かけた。 import _ "github.com/go-sql-driver/mysql" 調べてみると、 これはブランク識別子を利用した import で、 import 対象のパッケージを初期化するためのものらしい。つまり、 init() や package value と…

Go の init() が呼ばれる順番

結論から言うと、import される順番に依存する。以下のような main での import を例にすると、 first の init() が呼ばれた後に second の init() が呼ばれる。 package main import ( myapp/first //最初に呼ばれる myapp/second //次にこれが呼ばれる ) f…

struct に static method は必要か?

golang を触りたての頃、struct に static method を実装したいと思った。なぜかというと、 1つの package に function をずらーっと定義すると、 なんだか冗長な命名になってしまうから。 util.UserXxx() util.TeamXxx() util.EventXxx() package を切って…

struct に依存しない処理は function に切り出すのか、method に切り出すのか

以前少し考えて自己解決して終わったんだけど、 ちょっとしたきっかけがあったのでアウトプットしてみる。以下のような Person があって、 Hello(), Goodbye() には全く同じ「複雑な処理」がある場合・・・ type Person struct { name string } func (p *Per…

golang の WAF のオートリロード

https://github.com/codegangsta/gin ↑ この gin ってやつを使うと ソースコードの変更検知 + オートリロード が可能になる。 ちなみに、以下の WAF とは別物です。 https://github.com/gin-gonic/gin https://github.com/codegangsta/gin#supporting-gin-in…

golang のメソッド名の Must について

https://golang.org/pkg/regexp/#MustCompile ↑ こんな感じで Must が付いているものがある。 Must が付いているものは error を返す代わりに panic を発生させる。で上記の MustCompile() の説明文の一部が以下。 It simplifies safe initialization of glo…

golang の embedding について思ったこと

この記事は Go (その2) Advent Calendar 2016 の20日目の記事です。どーもpospomeです。(´・ω・`) GAE/GO の環境でサーバサイドエンジニアとして働いています。twitter では 実装パターン, DDD, golang, GCP についてつぶやくことが多いです。 同じような分…

パッケージの循環参照

循環参照についてです。 パッケージの循環参照 from pospome

goonで生成されるmemcacheのキー

goonで生成されるmemcacheのキーってどーやって作ってんのかな? と思って調べてみました。以下で生成している。 https://github.com/mjibson/goon/blob/master/goon.go#L71-L74Entityのkeyをエンコードして、「g2:」というプレフィクスを付けている。 ローカ…

golang + IntelliJ の import パス補完に _vendor, src が含まれる

気になったので調べてみたプロジェクトルートの指定方法が間違っている可能性が高い。以下のようなディレクトリ構成の場合 Myapp _vendor src myapp hanlder handler.goIntelliJ のプロジェクトルートを Myapp に指定すると、 _vendor とか src が含まれる。…

golang の http request の panic を捕捉する

panic の画面が表示されてしまうので、 どうすればいいのかを調べてみた。echo の middleware ではリクエストを defer して recover してるみたい。 https://github.com/labstack/echo/blob/master/middleware/recover.go#L65-L81 /net/http にもそれっぽい…

golangの正規表現は遅いのか?

golangの正規表現は遅いって聞くけど、実際どーなんだろ? って思ったよっていう記事です。 おそらく、この記事を読んでも何も得られないと思います。 -----追記 2016/11/26 ------- 書籍「みんなのGO言語」で少し言及されていました。 golang の正規表現は場…

golang の 名前付き結果パラメータ(Named Result Parameters)の利点とか欠点とか使い所について

以下にある。 https://github.com/golang/go/wiki/CodeReviewComments#named-result-parameters日本語でまとめてあるのが以下。 ページ内を「名前付き結果パラメーター」で検索すると出てきます。 http://aial.shiroyagi.co.jp/2016/07/golang-api-server-de…

golang で {"key1":"value1", "key2":"value2"} のJSON字列を map[string]string に変換する(golang json to map)

なぜか苦戦したのでメモしておく。https://gobyexample.com/json ↑ ここに書いてある。上記から抜粋したのが以下。 json.Unmarshal() の第一引数が []byte になっているので、string の場合は変換してあげる必要がある。 var dat map[string]interface{} if …

BlobStoreAPI で Error: Server Error

BlobStoreAPIで以下のエラーが発生した。 Error: Server Error The server encountered an error and could not complete your request. If the problem persists, please report your problem and mention this error message and the query that caused it…

golang + BlobStoreAPI で ERROR: blobstore: error reading next mime part with boundary "===============xxxxx==" (len=xx): multipart: NextPart: EOF のエラー

ERROR: blobstore: error reading next mime part with boundary "===============xxxxx==" (len=xx): multipart: NextPart: EOF GAEのBlobStoreAPIにファイルをアップロードした後にリダイレクトされるエンドポイントで 以下のように blobstore.ParseUpload…

golangでGCSにzipファイルをアップロードする

zipだからといって、特別なことは必要ない。 普通に書き込めばいいだけなので、 zipファイルを読み込んで、 以下のGCSのサンプルにあるように wc.Wtite() に []byte を渡してやればいい。 https://github.com/GoogleCloudPlatform/gcloud-golang/blob/master…

golang で type XXX has both field and method named YYY

golang で以下のエラーが出た。 type XXX has both field and method named YYY「XXX はYYYというフィールドとメソッド両方を持ってます」つまり、struct に同名のフィールドとメソッドは定義できない。理由は以下にある。 https://groups.google.com/d/msg/…

golang の 正規表現で error parsing regexp: invalid or unsupported Perl syntax: `(?=`

golfing の 正規表現で以下のエラーが出た。 error parsing regexp: invalid or unsupported Perl syntax: `(?=`これは正規表現の「(?= 」(肯定先読み)をサポートしていないってことらしい。 使えないのか・・・。対応しているライブラリはあるみたい。 ht…