これは Go Advent Calendar 2017 その2 6日目の記事です。 https://qiita.com/advent-calendar/2017/go2みなさん、こんにちは。 pospome です。 普段は GAE/Go でサーバサイドの開発をしています。twitter では 実装パターン, DDD, golang, GCP についてつぶ…
最近、golang のレイヤ構造において、他のコードに影響なくインフラレイヤのデータソース実装を差し替えることは可能か? という質問を受けた。回答時間が限られている中で質問を受けたので、 「現実的には難しい」という雑な回答しかできなかった。さすがに…
Datastore へのキャッシュに Memcache を利用している場合、 Memcache が落ちると Datastore のパフォーマンスが劣化することがある。当たり前と言えば、当たり前だが、 こういったケースを想定できていなかったので、 書いておく。 パフォーマンス劣化につ…
Datastore のバックアップが失敗すると以下のようなエラーが出る。 Transaction collision. Retrying... (/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/api/datastore.py:2688)Contention on slice xxxxxxxxx ex…
devfest 2017 tokyo の発表資料です。 Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える from pospome 当日は入室できない人もいたらしい & 機材トラブルで10minほど開始が遅れてしまった ということで申し訳なく思っています。また、立…
struct のフィールドを1つ削除してから goon で Get() したら以下のエラーが出た。 goon: Failed to decode field createdAt - gob: decoding into local type time.Time, received remote type []int craetedAt が decode できなかったらしい。 で、根本原…
datastore 上に 特定の int の ID を key とするマスターデータを作りたいと思った。 例えば、以下のように key に既存の商品IDをセットするようなケース。 -------------------------- key | name | createdAt -----|------|------------- 1001 | 醤油 | 20…
自分は iota の使い所が分からなかった。 なんか事故りそうだし、明示的に値を宣言した方が分かりやすいような気がする。で、こんなツイートをしたら・・・#golang の iota 使った定数定義って、定数の並び順によって値が変わるから、なんか事故りやすい印象…
日頃から引数にポインタを渡した方がいいのか? 値を渡した方がいいのか? 戻り値はどーなの? メソッドのレシーバは?なんて迷っているのでアウトプットしてみる。メソッドのレシーバについては以下に載っていた。 https://github.com/golang/go/wiki/CodeRevie…
以下のブログに書いてある通り、 pospome.hatenablog.comDatastore は kind の property が struct の field に存在しないと ErrFieldMismatch というエラーが発生する。「datastore: cannot load field xxxx into a xxx: no such struct field」のエラーと…
なんかググってもあんまり出てこなかったので、自分用メモ。TaskQueue のリトライは queue.yaml で設定する。以下のように設定すると、 task_retry_limit: 5 min_backoff_seconds: 10 max_backoff_seconds: 40リトライ間隔は 10s -> 20s -> 30s -> 40s -> 40…
ちょっとハマったので書いておく。 結論から言うと、synchronized を設定すればいい。GAE の cron は yaml で設定する。 https://cloud.google.com/appengine/docs/standard/go/config/cronref今回は「30分ごとに起動する」という設定をしたかったので、以下…
これのLT資料。 kaizen.connpass.com どこに何を書くのか? from pospome Twitter の反応 「どこに何を書くのか?」設計論の話だ #code_kaizen— masataka arai (@massa142) 2017年6月29日 コードの責務とか疎結合とかそういう実装よりの話っぽい。 #code_kaiz…
社内勉強会資料 アプリケーションコードにおける技術的負債について考える from pospome
goonの内部で以下のようなエラーが出力されていた。 ERROR: goon - goon.go:194 - pospome error エラーメッセージの「pospome error」は以下のように自分が用意した error なので、 このエラーを返しているどこかで goon がエラーログを出力しているみたい…
golang tokyo #5 の LT資料です。 golangtokyo.connpass.com Datastore/Go のデータ設計と struct の振る舞いについて from pospome 以下のような感想をいただいたり・・・参考になる #golangtokyo— コキチーズフレンズ (@k2wanko) 2017年4月27日 AppEngine …
以下の struct を Datastore に put しようとしたら・・・ type User struct { _kind string `goon:"kind,User"` ID string Tasks []*Tasks } type Task struct { Title string } 以下のエラーが発生した。 datastore: unsupported struct field type: *Task…
ちょっとまとめておこうかと。間違っているところがあったらブログのコメント or twitter で教えてください。 (´・ω・`)Datastore では Get() に指定した key の entity が存在しない場合、 datastore.ErrNoSuchEntity というエラーが発生する。 *データが…
LT資料です。 Goのシンプルさについて from pospome
普段は GAE で golang を使っているけど、 golang で mysql 使ったことないってのもどうなのかな? と思ったので、 ちょっとしたサンプルアプリを通して mysql を使ってみようと思った。 で、ORM どーしーよーかなと思って、 色々調べた記録です。 標準パッケ…
僕の Datastore の記事は Cloud Datastore/AppEngine Datastore 時代のものなので、現在の Firestore の Datastore mode だと一部の内容が正しくないと思うので注意してください。(´・ω・`)— pospome (@pospome) March 24, 2021 Datastoreを使っていて、 あ…
以下のエラーが出た。 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…
ググると色々情報があるが、 日本語の情報がないので書いておく。https://play.golang.org/p/atdCt2Mken ↑ これを実行すると「cannot assign to struct field users[0].Connected in map」のエラーが出る。結論から言うと map が問題らしい。go - Why do I g…
ORMを調べていると以下のような import を見かけた。 import _ "github.com/go-sql-driver/mysql" 調べてみると、 これはブランク識別子を利用した import で、 import 対象のパッケージを初期化するためのものらしい。つまり、 init() や package value と…
結論から言うと、import される順番に依存する。以下のような main での import を例にすると、 first の init() が呼ばれた後に second の init() が呼ばれる。 package main import ( myapp/first //最初に呼ばれる myapp/second //次にこれが呼ばれる ) f…
golang を触りたての頃、struct に static method を実装したいと思った。なぜかというと、 1つの package に function をずらーっと定義すると、 なんだか冗長な命名になってしまうから。 util.UserXxx() util.TeamXxx() util.EventXxx() package を切って…
以前少し考えて自己解決して終わったんだけど、 ちょっとしたきっかけがあったのでアウトプットしてみる。以下のような Person があって、 Hello(), Goodbye() には全く同じ「複雑な処理」がある場合・・・ type Person struct { name string } func (p *Per…
https://github.com/codegangsta/gin ↑ この gin ってやつを使うと ソースコードの変更検知 + オートリロード が可能になる。 ちなみに、以下の WAF とは別物です。 https://github.com/gin-gonic/gin https://github.com/codegangsta/gin#supporting-gin-in…
vagrant up したら Authentication failure で先に進まなくなった。 default: SSH username: root default: SSH auth method: password default: Warning: Remote connection disconnect. Retrying... default: Warning: Remote connection disconnect. Retr…
https://golang.org/pkg/regexp/#MustCompile ↑ こんな感じで Must が付いているものがある。 Must が付いているものは error を返す代わりに panic を発生させる。で上記の MustCompile() の説明文の一部が以下。 It simplifies safe initialization of glo…