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 についてつぶやくことが多いです。 同じような分…

fatal: could not read Username for 'https://github.com': terminal prompts disabled

プライベートリポジトリをgo getする方法 - lnrvrs ↑ これだった。 token を生成して、url instead of して終わり

パッケージの循環参照

循環参照についてです。 パッケージの循環参照 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 が含まれる。…

DataStore で Only ancestor queries are allowed inside transactions. のエラー

GCP

DataStore で以下のエラーが出た。 Only ancestor queries are allowed inside transactions. のエラーググると以下がヒット。 http://stackoverflow.com/questions/14397207/why-do-i-get-only-ancestor-queries-are-allowed-inside-transactions-error結論…

CQRSのコマンドでユーザーの入力エラーを返したい

結論から言うと、 DDDの.NET本の実装だとC#の async/await でイベント送信を非同期にしながらも、 同期的に戻り値返してたから、 これが正解なのかね・・・って感じです。 以下は色々調べた結果です。 過去にも似たような記事を書いたけど・・・・ http://d.…

.NETのエンタープライズアプリケーションアーキテクチャ

読みやすいDDD本ってイメージかな・・・。DDDの概念や用語について触れているので、 DDD本のような「DDDとは?」というのも学べるし、 具体的にどう実装するのか? っていうのも載っているので、実践DDD本のようでもある。自分はDDD本、実践DDD本、どちらも読…

DDDにおいて、なぜ複数の集約にまたがってトランザクションをかけてはいけないのか(multiple aggregates in one transaction)

DDD

DDDでは 集約 = トランザクション境界 でなければならないので、 複数の集約をまたがるデータの永続化処理は結果整合性になる。なぜ集約をまたいでトランザクションをかけてはいけないのかというと、 集約で「データの一貫性の境界」を表現するため。 なので…

golang の http request の panic を捕捉する

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

プログラマが知るべき97のこと

読みました。「知るべきこと」は1つが2ページほどで、 それぞれが独立している。気になったところだけパッと読めばいいかと。勉強に疲れた時の息抜き用に読んでみるといいかもしれない。

CQRSのコマンドで戻り値を取りたい場合はどうするのか(cqrs command return value)

----- 2016/10/23 追記 --------- コマンド操作が実行されると、 controller で アプリケーションサービスを呼び出す実装ではなく、 controller でコマンドを発行し、 bus で受信し、 saga で処理していくような実装を想定しています。詳しくは .NET本 を見…

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

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

DatastoreのParentKey(AncestorQuery)の特徴と使い所(datastore when to use parentkey)

GCP

とはいえ、ちょっと自信ないので、 間違っている箇所があれば指摘してもらえると嬉しい。 ParentKeyはEntity同士を関連付けるキーのことで、 RDBでいう外部キーのようなイメージを持つかもしれないが、全然違う。 何も考えずにParentKeyでリレーションを貼る…

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 …

git で fatal: reference isn’t a tree: xxxxxxx

以下のエラーが出た。 $ git submodule update fatal: reference isn’t a tree: 6c5e70b984a60b3cecd395edd5b48a7575bf58e0ググると以下を発見。 http://blog.machacks.net/2013/10/25/reference_is_not_a_tree/基本上記の記事で解決すると思うが、 自分の場…

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…

Google Cloud Storage のバケット直下にフォルダを作成する

GCP

結論から言うと、 ファイル名をスラッシュ区切りにすれば自動的にフォルダが作成される。GCSのサンプルコードでいうと、 以下の fileName という引数を 「my_dir/test.txt」のように指定すれば、my_dir の下に test.txt が生成される。 https://github.com/G…

GAE で Error: Request Entity Too Large のエラー

GCP

以下のエラーが出た。 Error: Request Entity Too Large Your client issued a request that was too large.これは GEA に送信するデータが制限を超えている場合に出る。 自分は 45MB くらいのファイルを form から POST したら発生。 このファイルをGCSに保…

マイクロサービスアーキテクチャ

https://www.oreilly.co.jp/books/9784873117607/読みました。やっぱりマイクロサービスは面倒。 大規模なサービスとか大規模な組織に適している印象。個人で何か作ろうと思っても、マイクロサービスは採用しない。 後から小さく切り出せるようにはしたいけ…

Google Coud Storage はローカルの開発サーバでエミュレートできない

GCP

エミュレートできないので、 GCPにデプロイして確認する必要がある。https://cloud.google.com/sdk/gcloud/reference/beta/emulators/対応しているのは以下のみ。bigtable https://cloud.google.com/sdk/gcloud/reference/beta/emulators/bigtable/datastore…

なぜあなたはJavaでオブジェクト指向開発ができないのか

読みました。オブジェクト指向の入門書的な感じなので、 分かりやすく基礎が学べる気がする。言語が Java なので、 当然ながら interface, abstract が存在しない言語だと その通り作れないんだけど、 それでも考え方自体は役に立つと思う。

オブジェクト指向をきちんと使いたいあなたへ

読みました。ActiveRecordのように機械的にテーブルに紐づくモデルを作って、 それに対してメソッドを生やしていく実装をしていると、 「仕様を反映した本来あるべき姿のモデル」を見失う可能性があるなと感じた。「本来あるべき姿」とフレームワーク、ライ…

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 で書くとこんな感じ。 golang は例外ないから error を返して…

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

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