golang.tokyo 静的解析Dayでgolang.org/x/tools/go/analysisを使ってみた
golang.org/x/tools/go/analysis面白そうだなー。 けど触る時間がなかなか取れないなー。 と思っていたらちょうどタイムリーなツイートがあり、12/8とかにGoで静的解析を一緒にモクモクやるかいをどこかでやりたいけど、会場がないので、一緒にモクモクしてくれる人とどこか会場を探してます。— tenntennʕ ◔ϖ◔ʔ ==Go@Goが生きてる (@tenntenn)...
View ArticleVimのexecute()と組み合わせて便利なコマンド
この記事はVim Advent Calendar 2018の13日目の記事です。先月に開催されたVimConf 2018で、Migrating plugins to standard featuresというタイトルで発表してコマンドの結果をバッファに表示する方法を紹介しました。その中で解説しきれなかったテクニックとして、以下のようなコマンドを定義しておくとL...
View Articlegoonのクエリをチューニングした時のメモ
App Engine(Go 1.9)でDatastoreからデータを取得するのにgoonのGoon.Runを使っていたが、プロパティを追加する改修*1をした後、 latencyが遅くなり、DatastoreでDeadline exceededが頻繁に発生するようになってしまった。とりあえず該当するリクエストをStackdriver...
View ArticleMojaveでGDB 8.3を使う
1. インストールbrew install gdb --HEAD2019/04/13時点でインストールされるバージョンは8.3.50。 2019/05/14以降は--HEAD不要。echo"set startup-with-shell off">> ~/.gdbinit を実行するようにと表示されるが、ファイルの場所は$HOME/.config/gdb/initでも良い。2....
View ArticleApp Engineのgo111用ディレクトリ構成
App Engine Standard EnvironmentでGo1.9を使う時は以下のように、リポジトリのルートをGOPATHとして設定し、appcfg.pyを使ってデプロイをしていました。. ├── app.yaml └── src └── app ├── glide.lock ├── glide.yaml ├── app.go ├── handler ├── ... └──...
View Article素のVimでGoを書く時のテクニック
gorillavim.connpass.comにて、外部ネットワークに繋がらない環境でvimとgoしか使えないという縛りでライブコーディングをしてきました。実際にそういう環境があるのか?という話はさておき、そのような状況でも以下を駆使してそこそこコードが書けます。:%!gofmtでコードを整形できる:r! go docの結果を適当なバッファに出力する...
View ArticleDatastore Emulatorのエンドポイント
Cloud Datastore エミュレータは起動した後、gcloudコマンドではなくREST APIを使って操作するらしい。が、そのあたりの情報が全然まとまっていなかったので本体の中をチラ見して必要そうなところを調べてみた。cloud-datastore-emulator 2.1.0 Method Path Description GET / OKを返すだけ POST /reset...
View ArticleStackdriverの設定をterraformで管理する
今までアラートポリシーやカスタム指標などのStackdriverの設定をyamlやテキストで保存し、自作ツールで適用するようにしていましたが、自作ツールのメンテナンスが面倒になってきたのでterraformに移行することにしました。移行にあたって、既存の設定ファイルは破棄し、terraformerを使って以下のように再作成しました。1....
View ArticleCloud Datastore用キャッシュパッケージの検討
現在App Engine(Standard Environment) + Go1.11環境*1でgoonというパッケージを利用し、Datastoreのデータをキャッシュしています。goonはバックエンドとしてApp Engineのmemcache*2を使用しており、こちらがGo1.12から使えなくなってしまうので他のパッケージに移行しなければなりません。App...
View ArticleVimのtagfuncでLSPを使う
この記事はVim Advent Calendar 2019の6日目の記事です。今年の4月にv8.1.1228でtagfuncという機能が追加されました。こちらは:tagや:tselectなどのタグ系コマンド*1を実行した時、tagsファイルを検索する代わりに呼ばれる関数を設定するためのオプションです。設定する関数の形式としては次のようなものです。" pattern:...
View Articlegoplsでworkspace/symbolが使いたい
現状の最新版(gopls/v0.2.2-pre2)では未実装。daisuzu.hatenablog.comを書いていたら欲しくなったので第1回 ゴリラ合宿で実装したのがコチラ。github.comsymbolの探索はServerのsessionのViews()から...
View ArticlepackagestestのExported.Expectを使ってGoのソースからマーカーを収集する
golang.org/x/tools/go/packages/packagestestパッケージは静的解析など、Goのソースを読み込んで何かしらの処理を行うようなツールのテスト用にダミープロジェクトを作るためのパッケージです。そういったツールを作る際、テストで期待する結果を完全に決め打ちで_test.goに書いておいても良いかもしれませんが、パターンを増やす時にはダミーのソースとそれに対応する期待結...
View ArticleGoでREST APIを呼ぶテストにhttp.FileServerを使う
例えばGET /users/:idのようなAPIの場合、testdata └── users └── 1のように、testdata配下のusersディレクトリにidをファイル名としたJSONファイルを配置しておきます。そうすると、http.FileServer(http.Dir("testdata")) で、testdata配下のパスとリクエストのパスが一致するファイルが存在すれば200...
View Articlegopls(v0.4.0)の機能
goplsは更新頻度が高く、何ができるのかをちゃんと把握できていなかったので、LSPのメソッドベースで今の時点(v0.4.0)の機能をざっと調べてみることにしました。補完(textDocument/completion)ジャンプ系textDocument/definitiontextDocument/typeDefinitiontextDocument/implementationtextDocum...
View ArticleGoでprotobufの定義をimportせずにフィールドの値を使う
以下のようなコードでreqにあるフィールドを使いたい場合、opt := grpc.WithUnaryInterceptor(func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption)...
View ArticlegoplsのSymbolMatcherとSymbolStyleオプション
以下の記事で、workspace/symbolのオプションは補完と同じmatcherと紹介したが、現在のv0.4.4ではsymbolMatcherとsymbolStyleになっている。...
View ArticleISUCON10に初参戦してみた
ゴリラさんと出てみようと話していたものの、申し込みのタイミングを逃してオワタと思っていたら@inductorさんに拾ってもらい、カンガルーと犬とゴリラとしてなんとかISUCON10に参加することができました。当日は開始ちょっと前*1にDiscordとGoogleドキュメントでコミュニケーションすることを決め、...
View Article