タグ

golangとgoに関するokinakaのブックマーク (9)

  • Goのアンチパターン集

    Go言語で開発を続けていると、便利な言語機能ゆえについ陥ってしまう非推奨なコーディングパターン=アンチパターンが存在します。記事では、広範なカテゴリーにわたるアンチパターンとその改善策を、具体的なコード例とともに解説します。各アンチパターンについて、その状況と文脈、問題点(保守性・性能・正当性への悪影響)、そして推奨されるベストプラクティスや改善例を示します。 コーディングスタイルにおけるアンチパターン まずは基的なコーディングスタイル上のアンチパターンです。これらはコードの可読性や意図の明確さを損ね、場合によってはバグの温床にもなりかねません。 Blank識別子(_)の不必要な乱用 アンチパターンの文脈: Goでは使わない変数を表すためにブランク識別子_が使えますが、不要な場面で乱用するケースがあります。例えばforループでインデックス変数を使わないのに_で受けてしまう、あるいはマッ

    Goのアンチパターン集
  • GoでLuaのユニットテストを書こう | CyberAgent Developers Blog

    ABEMAの広告システムのバックエンド開発をしている黒崎 (@kuro_m88) です。 GoでLuaのユニットテストの実装を試みた事例をご紹介します。 GoでLuaのユニットテストを書くモチベーション 端的に言うとGoで書いているアプリケーションサーバでValkeyを使っており、Valkeyの機能を拡張するのにLuaで処理を記述する必要が出たためです。 Valkeyとは Valkeyはインメモリデータベースで、2024年に諸般の事情からRedisをforkする形でLinux Foundation傘下で開発がはじまりました。 ValkeyはRedisからforkされたため大半の機能はRedisと互換性がありますが、AWS, Google Cloud, Oracle Cloudなどの大手企業が開発に参加しており、積極的にサポートする姿勢が見てとれます。 Amazon ElastiCache

    GoでLuaのユニットテストを書こう | CyberAgent Developers Blog
  • Goのテストをはじめてみよう(2025年版) | フューチャー技術ブログ

    春の入門祭り2025 13目の記事です。 はじめに製造エネルギー事業部の辻です。Goのテストをはじめてみよう、という記事です。 この記事は、5年前の2020年に私が執筆したGoのテスト入門記事(Goのテストに入門してみよう!)のリメイク版です。当時は執筆したときのGoのバージョンは1.14でした。記事はありがたいことに継続的に反響をいただいていたものの、いくつか記述が古くなっていた点がありました。そこで今回Go1.15以降で導入された機能や、周辺のアップデート等を取り込み、改良しました。 Go のテストに関するヒント集としてお役に立てれば幸いです。 TipsGo のテストの仕組みに、ベンチマークに関するテストと Example テストというサンプルコード用のテストも含まれているのですが、この2つは対象外にします。基礎的と思われる内容から順に並べてみました。 Tips テストがしたい テス

    Goのテストをはじめてみよう(2025年版) | フューチャー技術ブログ
  • 少しずつ育てるGo言語のプロジェクト構成

    23/9/21追記:この記事を読む前に ついにGoチームから、プロジェクト構成に関するガイドが公開されました! 記事を読んでくださることも大変嬉しいですが、ぜひこちらのガイドもご一読ください! この記事は何 Go言語を書いたことがある方も、興味はあるけど触ったことがない方もこんにちは。 Goに限った話ではないと思いますが、ガリガリコードを書いていて、あるタイミングで気になるのがプロジェクト構成(ここではディレクトリ構成の意図)ではないでしょうか? それを裏付けるかのように、Go界隈では以下のリポジトリが話題に上がることがあります。Star数すごいですね😇 リポジトリ名から公式感が漂いますが、そういう訳ではないのがミソです。 こちらのリポジトリ冒頭にも記載されていますが、次の点に留意する必要があるでしょう。 これは、Goアプリケーションプロジェクトの基的なレイアウトです。これは、コアと

    少しずつ育てるGo言語のプロジェクト構成
  • Goのカスタムエラーとその自動生成について - asterisc

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

    Goのカスタムエラーとその自動生成について - asterisc
  • Go言語で実装するプラグイン機構

    ソフトウェアに拡張性を持たせる時にプラグイン機構を持たせる事は一般的ですが、それを実現する方法は結構バラバラなのかなと思います。例えば、 C 言語等の.so/.dll を読み込む方法 Nodejs のような言語での単なる import TCP や Unix ソケットを利用して RPC 通信を行う方法 などが有るのかなと思います。1 番目・2 番目は、関数の呼び出し速度等のオーバーヘッドが少なく高速ですが、言語等の制約が大きくなる・メモリを共有することによるセキュリティリスクが発生します。そこで、提供するインターフェースを制約出来る場合は、3 番目の手法が多く使われるようです。 Go 言語で開発されている、hashicorp/terraform cloudfoundry/cli は共に 3 番目の RPC 通信でプラグイン機構を実装しています。その中でも terraform で使用されている

    Go言語で実装するプラグイン機構
  • Goでプロビジョニングツールを作った - オープンソースこねこね

    GitHub - kohkimakimoto/cofu: Minimum configuration management tool written in Go.github.com CofuというサーバプロビジョニングツールをGoで実装しました。Itamaeを参考に作りました。実装言語の違い(ItamaeはRubyによる実装)はありますが、外部仕様、内部実装、共にかなり似せて作ってあるので、ItamaeまたはItamaeが参考にしているchefを使ったことがあると、理解は簡単かと思います。特徴をざっくり説明すると、 ローカルでのプロビジョニングのみ対応。SSHなどでのリモートサーバのプロビジョニングはサポートしない Goなので実行ファイル一個で動く。導入が簡単 レシピはLuaのDSLで記述する 今のところ動作プラットフォームはRedHat(CentOS)のみをサポート あたりでしょうか。

    Goでプロビジョニングツールを作った - オープンソースこねこね
  • Go言語の並行処理デザインパターン by Rob Pike 前編 - Qiita

    package main import ( "fmt" "math/rand" "time" "runtime" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) rand.Seed(time.Now().UnixNano()) c := boring("boring!") // Function returning a channel. for i := 0; i < 5; i++ { fmt.Printf("You say: %q\n", <-c) } fmt.Println("You're boring: I'm leaving.") } func boring(msg string) <-chan string { c := make(chan string) go func() { // We launch the goro

    Go言語の並行処理デザインパターン by Rob Pike 前編 - Qiita
  • Golang vs PHP7(追記あり) - GMOインターネットグループ グループ研究開発本部

    Golangが一番パフォーマンスが良いかと予想していましたが、全く逆の結果になってしまいました。 Golangが遅い理由 遅い原因をいくつか考えて改善できないか試してみました。詳細は省きますが、以下の点については問題なさそうでした。 goroutineはリクエスト単位で起動している コネクションプールは有効になっている BeegoORM特有の処理は主原因ではない(標準ライブラリのsql関数と大差なし) DB側のCPU使用率は100%になっているが、CPU使用率とメモリ使用量はPHP環境と同程度の負荷になっている ここまで確認して、プロファイラを使った方が良さそうに思えたので、いったんプロファイラで状況を確認するために、標準で提供されていて手軽に使えそうなpprofを使ってみました。topで確認すると次のような結果がでました。 (pprof) top 20 -cum 920ms of 15

    Golang vs PHP7(追記あり) - GMOインターネットグループ グループ研究開発本部
  • 1