情報と電子とおおかた遊び

プログラムの備忘録を綴りつつ、適当に遊びも記載するゆるいブログ

mercari.Go #6に参加してきた

メルカリさんのところの、mercari.Goに参加してきました。 Go言語はアプリのAPIサーバーの開発でめっちゃ使っているので、勉強を常にしています。

mercari.connpass.com

JavaとGoを比較した話

  • go のイメージ -> 感度の高い人がやる言語
  • でも最近は会社で使われるようになっている
  • Goで書かれた有名なgo channelを使ったソースがある
  • それをjavaで書いてみた
  • 同じことをJavaでできるが、必要な知識が多い。
  • そこがGoがシンプルと言われる所以か
  • Go言語でオブジェクト指向っぽいことできるが、それらしくやろうとすると闇が増える。

YAMLをテストする

  • IaCの浸透]
  • インフラの状態を設定で書く
  • Policy as Code -> HashiCorpが提唱した
  • Hashicorpではsentinelというのを持っている
  • Stein -> ポリシーをコード化できる
  • こうすることでレビューで確認することを自動化できる
  • 独自DSLをGOでは描きやすいので、GOを使った

所感:

YAMLをチェックする機構はプラグインなどでもあまり粒度が高くないので、こういうツールを自作するのがチームのためになるのかもしれない

Sliceのコピーで起きた不思議なこと

  • go は固定長の配列
  • sliceは配列のラッパー
  • 実際は固定長の配列
  • Shallow copyを気をつけないと、appendで変な値を入れてしまう。

Writing Compiler in Go

  • writing interpreter in go
  • writing compiler in go
  • 静的解析ツールを作ろうと思うと、astの理解が必要

GoのMapとHeapを作った

  • GoでGo compilerを作った
  • 自作コンパイラ3原則
    • 小さく始める
    • 動けば正義
    • 後からリファクタ。

Goのエラーハンドリング

  • 標準パッケージでのエラーハンドリング
  • 標準パッケージではエラーの可能性があるのはエラーを返す
  • エラー返却は独自型でラップするなども方法の一つ
  • 現場ではstack traceが欲しい -> どこでエラーが出たかわかりにくい
  • errors.Wrapを使うとstack strace的なことができる

以上でーす。 前もgoogleさんだったり、GameWithさんとの面接の時にヒルズにはきましたが、なんていうか非常に圧迫感がある。 なんでだろうね。エラベーターホールが吹き抜けてなくて、閉塞感があるからかなw とまぁ、こんな感じで、いろいろなことを知れた1日でした。