2021年2月16日のブックマーク (5件)

  • go - Pointers vs. values in parameters and return values - Stack Overflow

    In Go there are various ways to return a struct value or slice thereof. For individual ones I've seen: type MyStruct struct { Val int } func myfunc() MyStruct { return MyStruct{Val: 1} } func myfunc() *MyStruct { return &MyStruct{} } func myfunc(s *MyStruct) { s.Val = 1 } I understand the differences between these. The first returns a copy of the struct, the second a pointer to the struct value cr

    go - Pointers vs. values in parameters and return values - Stack Overflow
    cocoasynn
    cocoasynn 2021/02/16
  • Goでのオススメエラーハンドリング手法

    この記事は「Eureka Advent Calendar 2020」の19日目の記事です。 こんにちは、2020年今年こそはとダイエットに意気込み、振り返ってみればジムへ行ったのは1回きり、出前を頼んだのは100回以上、見事に5kg体重を増やした山下です。 昨日は同じBackendチームのJamesさんによる「Understanding Allocations in Go」でした。 今回はこちらの記事にあるPairsエンゲージのエラー機構を詳しく説明していきたいと思います。 (当は面白Goクイズをたくさん出したかったのですが、playgroundをmedium上にうまく埋め込めず断念しました。泣) 概要errorsパッケージを作成して独自のエラー構造体を定義しましょうエラーは全ての箇所でラップして綺麗にスタックトレースを出力しましょうエラーレベルやエラーメッセージを付与して汎用性を高めて

    Goでのオススメエラーハンドリング手法
    cocoasynn
    cocoasynn 2021/02/16
  • Goの実プロジェクトでのエラーハンドリングの悩みどころと解決案 - Carpe Diem

    概要 Go言語に限らずではありますが レイヤ間のエラー伝搬 外部APIを叩いた時のエラーコードハンドリング HTTPやgRPCとしてレスポンスを返す時のエラーハンドリング で悩むことは多いと思います。 今回はそれの1つの方針を紹介します。 課題 レイヤ間のエラー伝搬 Goのエラーは基的に例外を扱わず、常にハンドリングする前提です。なので user, err := findUser(id) if err != nil { return User{}, err } みたいなコードが大量に生まれます。 一方でその関数を呼び出した側ではそれがどんな種類のエラーなのか分かりません。 NotFoundだったりDB自体のエラーだったりしますが、それを外層のレイヤ(HTTPレスポンスを返すハンドラなど)でハンドリングするのは辛いです。 レイヤ毎のエラー内容を知る必要が出てくるため余計な依存が生まれてしま

    Goの実プロジェクトでのエラーハンドリングの悩みどころと解決案 - Carpe Diem
    cocoasynn
    cocoasynn 2021/02/16
  • Goのカスタムエラーとその自動生成について - asterisc

    はじめに この記事はGo2アドベントカレンダー14日目の記事です。 GoErrorハンドリングについては、これまでにも様々なパターンが発表されてきました。 今回は独自定義のエラーについて、これまでのパターンをまとめた上で、その実現をeasyにするgenerrというツールを作ったので、その紹介をします。 github.com Goのカスタムエラー Goのエラーハンドリングの中で、カスタムなerror型を用いるパターンは比較的広く知られているかと思います。 その中からいくつかのパターンを紹介します。 sentinel errorsパターン Goerrorはinterfaceとして定義されており、Error() stringのメソッドを実装さえしていれば、errorとして扱うことができます。 標準パッケージで提供されているerrorsやfmt.Errorfを用いて簡単にエラーを表現することが

    Goのカスタムエラーとその自動生成について - asterisc
    cocoasynn
    cocoasynn 2021/02/16
  • 情報の文脈も表現できる"書きたくなる"ツールが、サイバーエージェントのアウトプットを広げる

    サイバーエージェントはネットテレビのABEMAをはじめとするメディア事業、ゲーム事業、インターネット広告事業などを手がけるインターネット企業です。以前はメディア事業においては、事業内で複数の異なる業務支援ツールを利用していましたが、効率化を図るためにNotionに集約。技術部門ではコミュニケーションの最適化にも寄与したことで「朝会」を省略できるようになり、Notionの"書きたくなる"インターフェースによって情報共有が一段と進んでいます。

    情報の文脈も表現できる"書きたくなる"ツールが、サイバーエージェントのアウトプットを広げる
    cocoasynn
    cocoasynn 2021/02/16