タグ

golangに関するkuchitamaのブックマーク (31)

  • Go言語に出したプロポーザルが通った:{bytes,strings}.ContainsFuncの追加 - プログラムモグモグ

    今年の夏にGo言語に以下のようなプロポーザルを出していたのですが、それが先ほど承認されました。標準パッケージの関数追加になります。 proposal: bytes, strings: add ContainsFunc · Issue #54386 · golang/go · GitHub Go言語のstringsパッケージとbytesパッケージには、文字列から文字や部分文字列を探す関数がいくつかあります。 探す文字の位置を返す関数、最後から探す関数、そういう文字が含まれるかどうかを返す関数を表にまとめると、次のようになります。 Find what? Index* LastIndex* Contains* substr string Index(s, substr string) int LastIndex(s, substr string) int Contains(s, substr s

    Go言語に出したプロポーザルが通った:{bytes,strings}.ContainsFuncの追加 - プログラムモグモグ
  • Goエンジニアがk8sクラスタでノイジーネイバー問題に遭遇し、解決するまでの記録

    これは、とある僕のチームが運用しているWebアプリケーション (Go製) の、ヘルスチェック用エンドポイントの (リクエストハンドラーの) コードです。リクエストがきたら200 OKを返すだけの、シンプルな実装です。 func health(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) } ところが、たったこれだけの処理しかしていないエンドポイントのレイテンシが、ある時からピーク時に著しく劣化するようになり、ひどい時には最大3.4秒もかかるようになってしまったのです。 なぜこのようなことになってしまっていたのか、またそれをどのように調査し、解決したのかについて解説します。 システム概要 今回問題となったWebアプリケーションはGoで書かれています。実行環境は Kubernetes (GKE) で

    Goエンジニアがk8sクラスタでノイジーネイバー問題に遭遇し、解決するまでの記録
  • dockertest のススメ

    追記: 2024-07-20 Testcontainers を使いましょう。 概要 dockertest は go でテストを書く際に docker 経由で指定したコンテナを起動してくれてテストが終わったらコンテナを削除してくれる便利ライブラリです。 モチベーション 時雨堂では TimescaleDB という PostgreSQL に TSDB 拡張を追加した少し変わった RDBMS を利用しています。 TimescaleDB 専用の関数があったりするため、モックなどを使わずにテストを書くのが現実的です。 dockertest ory/dockertest: Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal wo

    dockertest のススメ
  • 【Go】GraphQL(gqlgen) + Go(gin) + runn でテストをしてみる

    はじめに サーバーサイドの八木です。 娘が生まれてからアゴヒゲを一回もそっていなかったようでモサモサになってしまいました。 娘は喜んで引っ張っているので一旦はヨシとします(怒られたら謝ります) 先日、なんとなく Zenn を眺めていると以下の記事が目に入りました。 そういえばAPIのシナリオテストしたいけど、丁度いいツールが見当たらず長らく手つかずになっていたプロジェクトがあり、導入する価値がありそうだなぁと思い試してみました。 結果から言うと現在使用しています。導入して良かったと感じています 🎉 良かった点 go test で完結出来ること API の呼び出し結果を取り回すことが出来る テストケースだけYAMLに逃がすことが出来るのでメンテすべきファイルが明確になる 機能がシンプルなので学習コストが低い データベースへのクエリ発行も対応している 上記がポイントかと思います。 特に 「g

    【Go】GraphQL(gqlgen) + Go(gin) + runn でテストをしてみる
  • Goのdefer文を使うときに気をつけること - Yappli Tech Blog

    サーバーサイドエンジニアの @shuymn です。 Yappliではサーバーサイド領域で利用するプログラミング言語のうちの1つとしてGoを採用しています。 Goには様々な言語機能がありますが、その中の1つにdefer文(defer statement)と呼ばれる機能があります。 記事ではdefer文の簡単な紹介と実際にプロダクトコードで利用する際に気をつけるべきことを紹介します。 defer文の紹介 defer文を使う時に気をつけること defer文の中身が実行される順番を把握する os.Exitするとdefer文は実行されない defer文で発生するエラーをどうするか defer文に渡した関数の引数は即時評価される forループでループごとにdefer文を実行する方法 defer文はエラー処理より先に書かない さいごに 参考記事 defer文の紹介 defer文はifやforなどの制御

    Goのdefer文を使うときに気をつけること - Yappli Tech Blog
  • graph-gophers/dataloaderはv7でgenericsに対応している - 詩と創作・思索のひろば

    GraphQL における N+1 問題の解決の機構として Dataloder と呼ばれるものがあるが、Go でこれを行うときは gqlgen + graph-gophers/dataloader という組み合わせがよく使われるようだ。後者は gqlgen の公式ドキュメントからも参照されているので、gqlgen を使っていれば自然とそうなりそう。 このへんの話は 【GraphQL × Go】 N+1問題を解決するgqlgen + dataloaderの実装方法とCacheの実装オプション - LayerX エンジニアブログ などに詳しい。 さて、この dataloaders ってのを普通に使ってコードを書いてみるとわかるのだけど、ロードのためのキーとして string を、ロードされた結果として interface{} を返すような実装になっている。つまり実際にデータベースにアクセスするよ

    graph-gophers/dataloaderはv7でgenericsに対応している - 詩と創作・思索のひろば
  • gRPCを用いたマイクロサービスのAPI仕様の記述 - Mercari Engineering Blog

    この記事はMERPAY TECH OPENNESS MONTHの10日目の記事です。 こんにちは、メルペイのバックエンドエンジニアの柴田(@yoshiki_shibata)です。 メルペイのバックエンドは、Google Cloud Platform上でGoogle Kubernetes Engineを使用して、マイクロサービスアーキテクチャを採用した多数のマイクロサービスから構成されています。モノリシックなサービス実装では複数層のライブラリ(あるいはコンポーネント)から構成されるのに対して、マイクロサービスアーキテクチャでは複数層のマイクロサービスから構成されます。 どちらのアーキテクチャにおいても、偶発的プログラミング(Programming by Coincidence)1を避ける2ために、注意を払って作成する必要があるのが、境界部分のAPI(Application Programmi

    gRPCを用いたマイクロサービスのAPI仕様の記述 - Mercari Engineering Blog
  • Go製の全文検索エンジンOmochiを作った.

    1.はじめに 膨大な量の電子データから目的となるデータを取得・抽出する情報検索。その技術は広く普及し、多くの人々が、様々な場面でその恩恵を受けています。GoogleやBingをはじめとした、世の中に大きなインパクトを与えるWeb検索がその代表例ですが、物件検索や論文検索、メール検索などその応用は様々です。 さて、今回取り組んだのは、Goによる転置インデックスを用いた全文検索エンジンのスクラッチ実装です。研究で自然言語処理を学んだことをきっかけに、情報検索や転置インデックスといったトピックに強い興味が湧いたので、Elasticsearch等には頼らず、ゼロから実装を行いました。以下、リポジトリになります。 記事では、Omochiの設計・実装に関する説明を行なっていきます。 2.転置インデックス型・全文検索エンジンOmochi リポジトリのREADME.mdにも記載がありますが、今回実装した

    Go製の全文検索エンジンOmochiを作った.
  • Kubernetesエンジニア向け開発ツール欲張りセット2022

    はじめに 記事では、筆者や筆者の同僚がKubernetes関連の開発をしているときによく利用しているツールを紹介します。 主にKubernetes上で動くプログラムをGoで書いたり、マニフェストのYAMLを書いたりするエンジニアが対象となります。 記事の内容は極力環境依存を減らし、Linux, WSL2, Macなどの環境で利用可能となっています。 WSL2(Ubuntu 20.04)、およびM1 Macで動作確認していますが、環境によって多少の違いが生じることもあるのでご了承ください。 基となるツール make & brew 記事ではmakeコマンドを利用します。 Ubuntuの場合は以下のコマンドでインストールをおこなってください。 Macの場合は、以下のページを参考にHomebrewとCommand line tools for Xcodeをインストールしてください。 Doc

    Kubernetesエンジニア向け開発ツール欲張りセット2022
  • Goプログラム実行時間の短縮 - ZOZO TECH BLOG

    こんにちは。生産プラットフォーム開発部の中嶋です。生産プラットフォーム開発部はアパレル生産のDXを進めている部門です。具体的には服作りのIT化を含めたアパレル生産の効率化の促進と「生産支援」のシステムを主にGoで開発しています。今回はその運用の中でGoプログラムの実行時間をどのように短縮したのかを紹介します。 目次 目次 学べること・解決できること 背景 エラー発生 調査・対応 インスタンスの変更 原因 実装アプローチの見直し ゴルーチンを使ったタイムアウト処理 サンプルコード チャネルのクローズについて Goのメモリマネジメントについて スタックとヒープ ゴルーチンとメモリについて ヒープについて 問題の仮説 どのように解決したか 実装イメージ 利用したパッケージ サンプルコード 結果 まとめ 最後に 参考リンク 学べること・解決できること Goのメモリエラーに対するアプローチ例 Go

    Goプログラム実行時間の短縮 - ZOZO TECH BLOG
  • Goのテストに入門してみよう! | フューチャー技術ブログ

    2020/08/15更新: 「テストの失敗をレポートしたい」と「サブテストの一部のみ実施したい」の章を追加 はじめにTIG の辻です。今回は春の入門祭りということで Go のテストに入門してみよう! という記事です。 書いた背景ですが Go の標準ライブラリのコードリーディング会で testing パッケージにチャレンジしてみましたが、難しすぎてわからん。そもそも Go のテストって何ができるんだっけ? という話になり、基的な内容をなるべく具体例をまじえながらまとめました。 ざっとどんなことができるんだろう、という index になれば幸いです。 TipsGo に組み込まれているテストの仕組みの中に、ベンチマークに関するテストと Example テストというサンプルコード用のテストも含まれているのですが、この 2 つは対象外にします。基礎的と思われる内容から順に並べてみました。 はじめに

    Goのテストに入門してみよう! | フューチャー技術ブログ
  • An Introduction To Generics - The Go Programming Language

    The Go 1.18 release adds support for generics. Generics are the biggest change we’ve made to Go since the first open source release. In this article we’ll introduce the new language features. We won’t try to cover all the details, but we will hit all the important points. For a more detailed and much longer description, including many examples, see the proposal document. For a more precise descrip

    An Introduction To Generics - The Go Programming Language
  • Goのテーブル駆動テストをわかりやすく書きたい

    Goでテーブル駆動テストを書いていると、書いているときは「すげー読みやすくテスト書けてるぞ!」と思っていても、落ち着いてから見てみると「なんだこれ...訳がわからん...」となることがあると思います。(自分はよくあります。) この記事は、このようなことを解決するのに役立つtipsについてまとめています。主にテストケースについて焦点を当てています。 テストしやすいコード設計に興味がある方は や を参考にしてください。 はじめに この記事はパーソナライズGopher道場で学んだことを元に書いています。 そして、この記事で紹介するテーブル駆動テストの書き方は主観に基づいており、 あくまでテストの1つの書き方にすぎないです。 なので、「この書き方をしないとダメ!」というものではないので、みなさんの考え方やプロダクトに合わせて、柔軟にこの記事で紹介するtipsを取り入れていただけると幸いです。 結論

    Goのテーブル駆動テストをわかりやすく書きたい
  • Effective Error Handling in Golang

    This article explores Go error handling. Earthly is popular with Go developers for ensuring reproducible builds. Check it out. Error handling in Go is a little different than other mainstream programming languages like Java, JavaScript, or Python. Go’s built-in errors don’t contain stack traces, nor do they support conventional try/catch methods to handle them. Instead, errors in Go are just value

    Effective Error Handling in Golang
  • Goのロギングライブラリ 2021年冬 - moriyoshiの日記

    この記事はPySpa Advent Calendar 2021の14日目のエントリーとして書かれました。昨日のエントリーは冷凍品でウキウキ引きこもり生活 でした。ちなみに私も70ℓの冷凍庫を購入しましたが当にライフチェンジングでした。 総論: なぜログが必要か 可観測性 たとえ目的は自明でも、その動作までが自明なアプリケーションというものはほぼ存在しません。現実の世界のアプリケーションというものは、動作パラメータだったり実行環境だったり、起動時点でのさまざまな要因によって挙動を変えるものだからです。そして、そうしたアプリケーションにはライフサイクルというものがあります。ここでいうライフサイクルは、アプリケーションの処理が実行されるにつれ、アプリケーションの内外との情報のやりとりで生じる大局的な状態の変化のことです。アプリケーションが並行処理を行うようなものであれば、個々の並行処理の単位

    Goのロギングライブラリ 2021年冬 - moriyoshiの日記
  • GraphQLのN+1問題を解決する DataLoaderの使い方 - 一休.com Developers Blog

    こんにちは。宿泊事業部の宇都宮です。この記事では、GraphQLサーバ実装時に遭遇するN+1問題と、その解決のために使えるライブラリを紹介します。 フィールド単位でresolverを用意する N+1問題 GoのDataLoaderライブラリ DataLoaderの仕組み DataLoaderのサンプルコード DataLoaderとDataDog APM むすび 採用情報 フィールド単位でresolverを用意する GraphQLでは、クライアントのクエリに応じてオンデマンドに結果を取得できます。 たとえば、以下のクエリを投げると… { accommodation(accommodationId: "00001050") { name } } 以下のようなレスポンスが取得できます。 { "data": { "accommodation": { "name": "マンダリン オリエンタル 東

    GraphQLのN+1問題を解決する DataLoaderの使い方 - 一休.com Developers Blog
  • 【GraphQL × Go】gqlgenの基本構成とオーバーフェッチを防ぐmodel resolverの実装 - LayerX エンジニアブログ

    こんにちは。SaaS事業でLayerX ワークフローの開発を担当している@sh_komineです。 この記事は、LayerX Advent Calender 2021の16日目の記事です。 LayerX ワークフローではGoGraphQLをフル活用して開発を行なっています。 www.layerx.jp GraphQLの良さはいろいろと語られていますが、「Goで実際にどう実装するんだ?」と言うところは、gqlgenの簡潔なGet Startedがあるくらいでなかなか手で動かさないと理解できないなという思いがありましたので、graphqlプロジェクトの基構成に触れながら、オーバーフェッチを防ぐ実装の仕方について書いていきたいと思います。 記事は実際の事例ではなく、gqlgen 初学者の全体把握、gqlgenの仕組みについての理解に焦点を当てた記事になります。 以下の流れで話をします。

    【GraphQL × Go】gqlgenの基本構成とオーバーフェッチを防ぐmodel resolverの実装 - LayerX エンジニアブログ
  • 今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ

    こんにちは、@p1assです。 最近研修で Go を書いていて、その際にいくつか質問をされるのですが、聞いてみると前にも答えたような質問が多かったので、これを機にブログに参考リンクをまとめようと思います。 質問された際にすぐ答えられない質問も数多くあり、調べたり教えてもらったりすることで様々なことを再発見できました。 この記事では、質問に対する回答をできるだけ公式に近い文章を引用する形で書き記します。私個人の考えは別の段落になるようにして、事実と意見を区別するように心がけています。 なにか誤りを見つけた際は GitHub で PR を投げていただけると助かります。 言語仕様 関数の引数は値渡しか参照渡しか? Go はすべて値渡し (pass by value) です。 ポインタの場合は、ポインタそのものがコピーされポインタの指し示す先の値はコピーされません。 Go の多値返却はタプルか?

    今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ
  • crontabを多少読みやすくするcrontocを作った - ariarijp’s blog

    個人的に欲しくなったので作った。crontab(CRON TABle)を読むためのツールなので、crontoc(CRON Table Of Contents)という名前。 github.com 導入方法などはREADMEのとおり。 使い方 crontab -lを見やすくするツールなのでどこで動かしてもいいけど、個人的には「あのサーバー、直近で動くバッチってなんだっけ」というのをサクッと確認したくて作ったので、sshコマンドでcrontab -lを実行し、その結果を標準入力として渡すと良い。 $ ssh remote-server crontab -l | crontoc Next: 2017-09-19 23:33:00 +0900 JST # * * * * * vmstat >> /tmp/vmstat.log Next: 2017-09-20 00:10:00 +0900 JST #

    crontabを多少読みやすくするcrontocを作った - ariarijp’s blog
    kuchitama
    kuchitama 2017/09/21
    便利そう!
  • Go1.9から使える Monotonic Clocks を試してみた

    先日Go1.9beta1がリリースされました。 Go 1.9 Beta 1 is released! Announcement:https://t.co/lV5nvXwOoR Get it!https://t.co/2LhlOo2EtX#golang pic.twitter.com/zm09DwX93q — Go (@golang) 2017年6月14日 Go 1.9 Release Notes 型エイリアスのサポート、math/bitsパッケージ、 sync.Map型など、 今回のアップデートでも便利そうな機能が追加されます。 詳しくはtenntennさんのGopher Fest 2017参加レポートをどうぞ。 今回のリリースノートを見て、個人的に注目しているのはMonotonic Clocksのサポートです。 他の機能追加はTwitterとかで見かけるけど、 Monotonic Cl