Skip to content

Go

ghqのインストール

  • 「改訂2版 みんなのGo言語」を買ったのでC101PAで試しながら読みすすめていた。
  • ghqをインストールするところでエラー。
  • どうやらgoのバージョンを1.12以上にあげないとダメらしい。
  • 先日パッケージでインストールしたgoは1.11.6だった。
  • 以前のやり方でインストールし直す
  • ~/.bash_profile の GOROOT/usr/local/go に変更してsourceする。
  • 無事インストール完了。

DeNA.go

@kiyotaka.nakashima / 新ゲームサーバ基盤TakashoでのGo言語活用事例の紹介 / ゲーム・エンターテインメント事業本部

  • Sakasho
    • 共通ゲームサーバー(複数タイトルで相乗り)
    • プレイヤーデータの管理
    • 課金系
  • Sakasyoの課題
    • 相乗りによる制約
    • 変更の影響大
  • Takasho
    • Webサバーフレームワーク
    • ステートレスなAPI
    • 1サーバー1クライアント
    • GCP(GAE)前提(Terraformで構築)
    • 共通機能も提供
    • クライアント側はC#
    • サーバ側はGo
      • 少ない学習コストで高いパフォーマンスと安定性
  • RPCサーバ
    • net/httpベース
    • gRPCの独自実装(GAEでgRPCがサポートされていなかった)
    • protoスキーマからコード生成
    • DBテーブルまわりもjsonで定義して生成

@toku_bass /次世代タクシー配車サービス「MOV」におけるテスト事例紹介 / オートモーティブ事業本部

  • GAE / CircleCI / chatbot E2E
  • 方針
    • テスト対象以外の暗黙のデータに依存しない
    • テスト全体に関わるfixtureを使わない
      • マスターデータはOK
    • 並列でテストを実行
      • user_idなどの固定値を書かないようにする
      • github.com/bxcodec/faker
      • primary key をランダム生成してかぶる対策
  • testerator
    • GAEのテストサーバーを立ち上げっぱなしにしてくれる
    • 起動には3秒くらいかかる
  • pstest
    • Cloud PubSubの公式ライブラリのテスト方法
    • どうやってテストしたらよいかわからなければ公式を見に行く
      • 公式もテストできていないことも・・

@kurikei / DeSCヘルスケアにおけるGo活用事例の紹介 / DeSCヘルスケアサービス企画開発部

  • GCP(GAE/Cloud Firestore/Cloud Functions/BigQuery) / CircleCI / OpenAPI 3
  • レイヤードアーキテクチャ(+DIP)
    • レイヤーで分離する→各レイヤーで関数を定義する→コード量が増える→テストも増える
    • gomockを使う
  • 暗号化の手法
    • DBの保存/取得時に透過的に処理する
    • エンベロープ暗号
      • カラム暗号化の際に使う
      • 鍵を暗号化する鍵(KEK)とデータを暗号化する鍵(DEK)の2種類を使う
      • KEKをKMSで管理して、DEKはデータと一緒に保存

Chromebookにgoの最新版をインストール

  • apt-get だと最新版が入らないので、1.13に備えて最新版をインストールする手順を確認しておく。
  • C101PAのOP1はARM系CPUなのでarm64用のファイルを使用する。
  • C223NAはintel入ってるのでx86-64でいけるはず。

環境

  • C101PA
  • Linux(ベータ)

手順

  • https://github.com/golang/go/wiki/ChromeOS を参考に進める
  • https://golang.org/dl/ から go1.12.7.linux-arm64.tar.gz をダウンロード
    $ wget wget https://dl.google.com/go/go1.12.7.linux-arm64.tar.gz
    
  • チェックサム確認
    $ sha256sum go1.12.7.linux-arm64.tar.gz 
    
  • ファイル展開
    $ sudo tar xpvf go1.12.7.linux-arm64.tar.gz -C /usr/local
    
  • バージョン確認
    $ /usr/local/go/bin/go version
    go version go1.12.7 linux/arm64
    
  • ワークスペース作成
    $ sudo mkdir /usr/local/go/work
    
  • パス設定
    $ export GOPATH="/usr/local/go/work"
    $ export PATH="${PATH}:/usr/local/go/bin:${GOPATH}/bin"
    
    一応、~/.bash_profileにも同等の内容を記載しておく
  • 動作確認
    • ファイル作成
      $ sudo vim /usr/local/go/src/hello.go
      
    • ビルド
      $ go install hello
        can't load package: package hello: cannot find package "hello" in any of:
          /usr/local/go/src/hello (from $GOROOT)
          /usr/local/go/work/src/hello (from $GOPATH)
      
      エラー。。。
    • run
      $ go run /usr/local/go/src/hello.go 
      Hello, Chrome OS!
      
      とりあえず実行できたから良しとしておく。

mercari.go

@tottie Gopher ライブドローイングのご説明

@rerorero protoactor-goでPregelを作った話

  • グラフプロセッシングの話
  • Map/Reduceの課題を解決するPregel(プリゲル)フレームワーク
  • アクターモデル

@knsh14 メルペイでの残高管理の話

  • Balance Service
  • gRPC, GKE, Spanner, Go
  • 全体設計
    • クリーンアーキテクチャベース
    • Viewなし
      • Infra Layerで変換して返す
  • トランザクション
    • UseCaseそうのInteractorで
    • 全体のロールバックが楽
  • DB
    • 標準パッケージは使っていない
  • APIの設計
    • 各種残高の増減機能
    • 種類にかかわらず同じインターフェースを提供したい
    • ロールバックしやすくしたい
    • 組み合わせのテストが大変
  • 冪等性
    • どのAPIがリトライされても大丈夫なように作る
    • 参照系はあまり気にしていない
    • 取引IDでチェックしている
  • データの整合性
    • 取引履歴が重要
      • 取引レコードから算出
      • 取引後の残高スナップショット
    • すべての処理が成功したときに履歴テーブルにコミットする

@akkie Readable code in Go

  • コードを読みやすくするために
  • 読みやすいコードとは
    • 他の人(本人含む)が最短時間で理解できるコード
  • コメントに監督としての感想を書く
  • コメントでコードをグループ分けする(テストコード)

@tenntenn The Go Playgroundをコマンドラインから扱う

  • txtar(テキストアーカイブ)形式
    • -- ファイル名 -- で区切る
    • playgroung上でタブ分けしてくれるchrome拡張あり
    • internalパッケージ

@tottie Gopher イラスト発表

感想

  • 絵がかけるってすごい
  • 質疑応答の内容が理解できず、まだまだ勉強不足だと感じた

Go Conference 2019 Spring

まとめ

  • エラーハンドリングはまだ各社試行錯誤している印象
  • コンテナやるならGoわかると便利
  • 英語もっとわかるようにならないとだめだ

Keynote

  • パッケージのプロキシとDBの話
  • 英語だったので言ってること半分もわからなかった

B1 (S): How a “not the greatest engineer” achieved his first contribution to Go

B2 (S): エラー設計について/Designing Errors

  • エラーの分類とどう処理するか

H3 (S): 標準パッケージのみで大量のPNG画像をいかに高速に処理するか

A4 (S): Design considerations for container-based Go applications

H5 (L): Writing Go Analyses with go/analysis (from Go Team)

H6 (S): Dive into Buildkit LLB with Go

H8 (L): Building Modules Discovery (from Go Team)

  • 使いたいモジュールを探して比較検討しての手間を解消するサービス
  • 公式?