Skip to content

Golang

Goのエラーのラップ

Goでスタイリッシュにエラーをラップする方法を学んだ - カミナシ エンジニアブログを見て、なるほどと思った。

ただ、自分の場合はエラーメッセージに、エラーを返した関数なりメソッド名を入れたい派なので、一律同じになるこの方法は見送りかな、と。

func hoge() error {
    err := Huga()
    if err != nil {
        return fmt.Errorf("Huga: %w", err)
    }
    return nil
}

こんな感じ。

Goのpresentパッケージ

Go製プレゼンツール「present」のインストール手順 - Qiitaを見て、そんなものがあるのかと初めて知った。

どんなものかと検索したら、Goのpresentで発表用スライドを作成する - Carpe Diemの記事で実際の例がリンクされてて、それ見たらこういうスライド見たことがあった。

最近はスライド作るのはMarp: Markdown Presentation Ecosystemを使ってばかりだけど、今度はpresentも試してみたい。

ginkgoの特殊機能とは?

昨日の調べもので出てきた、

Ginkgo has several capabilities that can only be accessed via ginkgo.

(Ginkgoには、ginkgoを経由してしかアクセスできない機能がいくつかあります。)

そのいくつかの機能を知りたい。

https://onsi.github.io/ginkgo/#ginkgo-cli-overview には、コマンドライン引数について書かれているが、むしろginkgoでサポートしていないものがあるという記述なので、思っていたのとは違う感じ。

Read more

ginkgoとgo test

GinkgoのV1とV2のテストケースが混在しているときに、V2のCLIでV1用のコードをテストしようとすると、ginkgo.timeoutが定義されてい内的なエラーになってしまう(うろ覚え)。

importをv2にすれば多分良いのだけれど、そうしなくても、テストの実行をgo testに任せれば、importで指定しているバージョンで実行してくれる気がする。

Read more

Ginkgoわからん

MDMMLじゃない話。

https://onsi.github.io/ginkgo/ でテストを、

Describe(){
    Context(){
        // 準備
        It(){
            Expect()
        }
        // 次の準備
        It(){
            Expect()
        }
        // 後片付け
    }
}

みたいな感じで書いていたら、思った通りの動きにならなくてハマった。

どうやら、Contextの中は上から順番に実行されるのではなく、

Describe(){
    Context(){
        // 準備
        // 次の準備
        // 後片付け
        It(){
            Expect()
        }
        It(){
            Expect()
        }
    }
}

となるらしい。

やりたい順番で実行したければ、

Describe(){
    It(){
        // 準備
        Expect()
        // 次の準備
        Expect()
        // 後片付け
    }
}

ってやらないといけないのかなぁ。

Read more

golang.tokyo #28

golang.tokyo #28

https://golangtokyo.connpass.com/event/156678/

LT大会(16本!)です。

19:00 ~ 開場・受付

19:30 ~ 19:40 オープニング・乾杯

  • yappli

19:40 ~ 19:45 LT1: [仮]wire.goをプロダクトで使ってみた

bieshanさん

  • DIツール
    • 依存関係のコードを生成してくれる
  • wire使い方イマイチ理解していないので助かる
  • 型を見て生成しているので、同じ定義だとどちらを使っていいか判断できない
    • 型の名前を変えれば良い
    • 内部まで書き換えに行く?
      • 構造体でラップしてあげれば良い

19:45 ~ 19:50 LT2: 作業効率アップ!便利なTUIツール5選

ゴリラさん

19:50 ~ 19:55 LT3: Twitter を自由自在にフィルタリングする Twilter を作った

kawasin73さん

  • tweetbotおすすめ
  • フィルタした結果をRTするBOT
  • 鍵垢(BOT)でRTしてそれをフォローしておく運用
    • 鍵垢じゃないとRTするたびに相手に通知が飛ぶ

20:00 ~ 20:05 LT5: go toolを使ってインライン展開をのぞいてみる(仮)

tutuzさん

  • objdump(標準ツール)で逆アセンブリできる
  • インライン展開しない場合の実行コスト
    • 5倍くらいになる場合もある
  • 複雑なものは展開されない

20:05 ~ 20:10 LT6: Markdown内のコードだって美しくしたいんだ!!

po3rinさん

20:10 ~ 20:15 LT7: gRPC周りで困ったこととその解決方法

Go Sagawaさん

20:15 ~ 20:20 LT8: (仮)初めてGoで開発してみて思ったこと

rkmathiさん

  • 言語使用や書き方はわかった、実際のアプリケーションはどう書くのか
  • Gopher道場
  • C++やRubyと比べて長短

20:30 ~ 20:35 LT9: [仮]keepAliveのすゝめ

Shogo_Tomiokaさん

20:16 ~ 20:26 休憩

20:35 ~ 20:40 LT10: マイクロサービスで共用するprivateなエラー&ロギングパッケージを作った

Shohei O.さん

20:40 ~ 20:45 LT11: gRPCのクライアントが絡むテスト

dice_zuさん

  • https://daisuzu.github.io/golang-tokyo-28/#1
  • DI
    • 3rbパーティ性のライブラリが辛い
  • ダミーサーバー
    • コード量が増えて辛い
  • リクエストレスポンスを記録再生する
    • cloud.google.com/go/rpcreplay
    • gRPCクライアントのシグネチャに縛りあり

20:45 ~ 20:50 LT12: Repositoryによる抽象化の理想と現実

sonatardさん

20:50 ~ 20:55 LT13: インフラエンジニアもGolangが書きたい

nwiizoさん

  • Python(Fabric)のSSHクライアントをGoにした話
  • 運用が複雑化するとスクリプトも肥大化していく

20:55 ~ 21:00 LT14: 年末なのでgoを使ったプロダクトを初めてリリース・運用した1年を振り返ってみる

keitaro_1020さん

21:00 ~ 21:05 LT15: Transform Go error handling using AST inspector

Hidetake Iwataさん

21:05 ~ 21:10 LT16: Go基礎力に効く標準ライブラリContext徹底理解。あなたはContextの挙動を説明できますか?

shibu_jpさん

19:55 ~ 20:00 LT4: Write Kubernetes Custom Controller in Go

morito_ikedaさん

  • kubernetes-sigs/controller-runtime
  • 割とかんたんにカスタムコントローラーが作成できる

21:10 ~ 21:35 懇親会

21:35 ~ 21:45 結果発表

21:45 ~ 21:55 終了・撤収

Go Release 10 Year Anniversary Party in Tokyo

https://gocon.connpass.com/event/153665/

VMwareからのハシゴです。 出る前にDatadogのデモ見てたら出るのが遅くなってしまった。

19:00 - 19:30 Open

  • ケーキ!

19:30 - 20:00 History of Go by ymotongpoo

  • 30 October, 2009
    • 社内公開
  • 11 November, 2009
  • 1960-2007 - Foundations
    • HWごとに言語があった時代(-1950)
    • Jan 1960 ALGOL
    • 1964-2007 Concurrency
      • 1964 Unix Pipe
      • 1978 CSP(Communication Sequential Process)
  • 2007-2009 - Creation
    • C++11のTechTalk行ったら新機能の話ばかりだった
    • C++でコンパイルするのに45分かかる
    • コンパイル待ち時間の間に同僚と議論していたのがGoの始まり
    • Goは創造と収斂
    • No in Temporary, Yes is Forever
    • Ian: I never once failed at implementing generics. I just found out 99 ways not to
    • Goは良いデザインが来るまでは、NOと言う
    • Genericsについて最初に言及したのは2009年
  • 2009-2019 - Reflection
    • 2013頃からクラウド系のツールがgoで書かれ始めている
    • どんどん成長している
  • 2020- - Prediction
    • Go 2 に向けて
    • 教育向け
    • Go 2 というのは後方互換性が保てなかったときに初めて出るもの

20:00 - 20:20 AppEngine Standard for Go の移り変わり sinmetalの思い出から by sinmetal

  • ピザ取りに行ってて最初の方聞き逃した。。
  • 2nd genはGAEの依存を取り除いたもの
    • バージョン追従が早くなった

20:20 - 20:30 Break

ケーキカット

Read more

golang.tokyo #27

https://techplay.jp/event/753881

先日のGo Conferenceには参加できなかったので、当選できてよかった。

19:00 ~ 開場・受付

乾杯!

19:30 ~ 19:35 オープニング

  • DevQuizの解説。思ってた動作と違かった。。
  • 当日発表になった登壇者とスケジュール。予定より本数が少なくなっていました。

19:35 ~ 19:55 Session 1

Creating shell magager with golang / @yusuke_k0matsu

19:55 ~ 20:15 Session 2

Multi Cloud Serverless Architecture / @shibu_jp

20:20 ~ 20:35 休憩

20:35 ~ 20:55 Session 3

uber-go/guide の解説 / @knsh14

  • https://docs.google.com/presentation/d/10H6tvkVG2Qb9DNeSITAiKP-5BJKHqwnWFRCxEQYbpYQ/edit#slide=id.p
  • Uber社内で使われているスタイルガイド
  • ガイドライン / パフォーマンス / スタイル / パターン
  • Be Consistent
    • 可読性、保守性のためにコードの一貫性を保ちましょう
  • linter
    • go vet, goimports, golangci-lint
    • ulinter 作成中
  • Handle Tpe Assertion Failures
    • 型アサーションの結果をハンドリングしているかチェック
  • linterの作り方
    • ASTを作ってパターンを見ていく
  • Start Enums as One
    • enumのゼロ(iota)は、初期化(goのデフォルト初期値)しただけなのか明示的に設定したのか区別しにくいため
  • Converting number to string
    • fmt.Printfよりstrconvパッケージを使ったほうがパフォーマンス有利なので

20:55 ~ 21:00 LT1

SaaS関連系における静的解析の活用 / @yoheimiyamoto_

21:00 ~ 21:50 終了・撤収

golang.tokyo #26

https://golangtokyo.connpass.com/event/147175/

  • 今回はスマートホームとGoの話です

19:30 ~ 20:00 Go in Nature(仮) by songmu

  • Nature Remoの裏側
  • gocredits オススメ
    • 依存ライブラリのLICENSEを同梱してくれる
  • ecsched気になる
  • Websocketでクラウドに接続しっぱなしにしている
  • 外部のデバイスからはクラウドに司令を出す
  • 常時接続の管理が大変
  • ECS上でうごかしている
  • Nginxとポート数の問題
    • 接続数が少ないところにつなぎに行く
    • ALBに直接つなぎに行けるようにしたい
  • deploy時に接続を切るので、その後一斉に再接続が来る
  • Migration
    • goose から schemalex に乗り換えたい
  • Dependabot 導入
    • Go対応はちょっと微妙

20:00 ~ 20:30 Nature Remo用のGo API Clientを作った話(仮) by tenntenn

  • 完全に対応したGoクライアントが存在していなかったので作った
  • swagger見ながら作った
  • Dialogflowも使いたい

20:30 ~ 21:00 休憩

  • と言う名の懇親タイム

21:10 ~ 21:20 LT1 Raspberry Pi + Go で IoT した話 (仮) by yaegashi

  • エッジデバイスでの活用
  • クロスコンパイルが簡単
  • シングルバイナリ
  • 並列処理のサポート
  • GPIOの制御
    • pigpioが便利
    • 遅延、CPU負荷が弱点
    • periph.ioもオススメ

21:20 ~ 21:30 LT2 Goを使ったセンサーデータ収集基盤のお話(仮 by takeshinoda

  • IoTでGoは便利
    • クロスコンパイル、非同期データ通信制御、デプロイの容易さ
    • 非同期処理と同期処理の混在もOK
  • nodeとGo、Goのほうが安心感がある

21:30 ~ 21:40 LT3 Build real world data collecting architecture with goroutine & channel by banana_umai

  • pipeline pattern
    • channelで並列にデータ受け渡しをしていくパターン
    • データの順序性、即時性を保ちたい
  • debouncing, buffering
    • ネットワークの不安定さに対応できる