タグ

GoLangに関するkomlowのブックマーク (750)

  • Goでテストを書く(テストの実装パターン集) - Qiita

    Goでテストを書くお話です。 基的なところから、応用的なテストの書き方(パターン?)をまとめておくことにしました。 ポイントを先に列挙します: テストのエラーメッセージは丁寧に書こう テーブルテストを活用してパターンを整理しながら網羅しよう t.Runをつかって大きなテストを分割しよう t.Helperをつかってテストエラーの箇所をわかりやすくしよう テスト用のデータは testdata ディレクトリに置こう Setup/Teardownをうまく書いてテストの見通しをよくしよう 等 では、見ていきましょう。

    Goでテストを書く(テストの実装パターン集) - Qiita
  • Clean Architecture で Go 製の API サーバを書く - blog.syfm

    この記事は Aizu Advent Calendar の 20 日目の記事です。 adventar.org 前日は id:nktafuse の 、 nktafuse.hatenablog.com 明日は id:ywkw1717 です。 ywkw1717.hatenablog.com きっかけ 最近職場で Clean Architecture を取り入れたアプリケーションを Python で書いていて、Go でも書けないか?という試みではじめました。 作ったものは、サーバにアップロードしたファイル自体の改竄を検出できる簡易ファイルアップローダみたいなものです。 github.com 以下では CA について簡単に解説した後、設計・実装する上で悩んだ点などを挙げています。 Clean Architecture 原文と翻訳版は以下。 8thlight.com クリーンアーキテクチャ(The Cl

    Clean Architecture で Go 製の API サーバを書く - blog.syfm
  • Goを遅くしないための地味な話 – haraheniku – Medium

    この記事はGunosy Advent Calendar 2017の13日目の記事です。 広告技術部の@harahenikuです。 主な業務はGoによる広告配信APIの開発です。たまにPythonとかDjangoとかもやってます。 Goは速いですが遅いコードをかけば当然遅くなってしまいます。 この記事ではGoのプログラムを遅くしないために、実際に行ったチューニングを幾つか紹介したいと思います。 スライスの処理長さを指定するスライスの初期化は次のようなコードはappendでallocが発生します。 feature := []VectorEntry{} for i, v := range vec { e := VectorEntry{ ID: i+stride, Value: v, } feature = append(feature, e) }appendでallocされないように、makeで

  • How to Tokenize Complex Strings with Lexmachine

  • Go言語とDependency Injection | Recruit Tech Blog

    はじめに この記事はリクルートエンジニアアドベントカレンダー11日目の記事です。 こんにちは、APソリューショングループの伊藤です。このブログに記事を投稿するのは2年ぶりとなります。今回はGoに関する記事です。 この記事では下期(10月~)に私達のチームで行っている取り組みについて紹介させて頂きます。 私達リクルートテクノロジーズでは、全社で共通の開発標準として現在JavaベースのWebフレームワーク(WAF)を定めています。これらのJavaベースの技術に加えて、現在Go言語を全社的に展開しようと考え、プロトタイプ作成や実際のプロダクト開発を行ってきました。 この記事では、その中でも中核をなす技術である、Dependency InjectionのGoにおける実装について紹介をさせて頂きます。 Dependency Injectionの設計と実装 最初に、Dependency Injecti

    Go言語とDependency Injection | Recruit Tech Blog
  • Web Sessions and Common User Workflows - A Foundation for Go-Based Websites

  • go tool traceでgoroutineの実行状況を可視化する - ( ꒪⌓꒪) ゆるよろ日記

    こんにちわ。しいたけです。今日はgoroutineの実行状況をいいかんじに可視化するツールの話です。 goのプロファイリングツールと言えば、 runtime/pprof や net/http/pprof ですよね。これらの使い方はググればすぐに出てくるのですが、 詳細なtraceを取得して可視化できる runtime/trace については、日語の情報が殆ど無いので書いてみましいたけ。 runtime/trace はgoroutineの実行状況やsystem callのイベント、Heapやnetworkの状況をこんな感じに可視化してくれるので便利です。 これは自作のクローラーを動かしている際のtraceを可視化したもので、横軸がタイムラインになっており、上段に Heapの使用状況やgoroutineとos threadの数が, 下段はnetworkやProccesor(GOMAXPROC

    go tool traceでgoroutineの実行状況を可視化する - ( ꒪⌓꒪) ゆるよろ日記
  • Parsing with ANTLR 4 and Go

    What is ANTLR? ANTLR (ANother Tool for Language Recognition), is an ALL(*) parser generator. In layman’s terms, Antlr, creates parsers in a number of languages (Go, Java, C, C#, Javascript), that can process text or binary input. The generated parser provides a callback interface to parse the input in an event-driven manner, which can be used as-is, or used to build parse trees (a data structure r

  • Property Based Testing

    package foo func incr(i int) int { return i+1 } func decr(i int) int { return i-1 } func foo() { decr(incr(0)) } While obviously there are other things that make a program useful, the most fundamental thing that makes a program useful is that it needs to interact with things outside itself. This can come in the form of reading a file, reading a network input, reading user input, printing an output

  • Go で書かれた API Gateway "KrakenD" - tchsskのブログ

    これは Go3 Advent Calendar 2017 の 10 日目の記事です。 小さな役割を持つサービス群でアプリケーションを構成する、いわゆる Microservices が流行して久しいですね。サービスが細かく分割されるとき、それらを取りまとめるサービスが必要になることがあります。一般に API GatewayAPI Aggregator と呼ばれるものです。 そんな API Gateway のひとつに Go で書かれた KrakenD というものがあります。 KrakenD - Open source API Gateway 今回はこれを試してみます。 仕様 複数のバックエンド API を集約 (aggregate) する動きを見るため、以下のような仕様でサービスを構築してみます。 バックエンドに GitHub と Qiita の Web API を使用する Kraken

    Go で書かれた API Gateway "KrakenD" - tchsskのブログ
  • クラスター社のGo製WebAPI開発で主に使ってるライブラリについて - Qiita

    はじめに もうほかに選択肢無いでしょ的なライブラリを除くと主に使ってるのは以下くらいです。 思っていた以上に標準パッケージで筋肉なコード書いていたようです 😇 github.com/goadesign/goa: WAF github.com/jinzhu/gorm: DBmappingとquerybuilder go.uber.org/zap: logger aws-sdk-goとか紹介することもあまり無いので割愛してます。 github.com/goadesign/goa 独自のDSLでAPIの設計をすることで go generate とかでgoのコードとswaggerを生成している 設計の共通化やクライアントエンジニアと対話するときのドキュメントがコードとセットで吐き出せるので重宝している ↑にも書きましたが、レビューしてほしいときにswaggerのURLがgithubのコメントで

    クラスター社のGo製WebAPI開発で主に使ってるライブラリについて - Qiita
  • Repeatable and Isolated Development Environments for Go

    One of the common criticisms of the GOPATH is that it is hard to create isolated development environments without resorting to hacks, bash scripts, multiple GOPATH settings, or other trickery. Generally, I don’t often have too many problems with GOPATH, but when I do they are frustrating and hard to figure out. An example: Your dependency manager copies deps from your GOPATH into your project’s ve

  • 【翻訳】goroutine の仕組み - まるまるこふこふ

    訳者による概要 Krishna Sundarram 氏の記事「How Goroutines Work」の翻訳です。 「goroutine とは軽量スレッドである」という説明に対して抱くであろう 「どのようにして並行処理を実現しているのか」「既存のスレッド処理と何が違うのか」「なぜ軽量なのか」という疑問を解消する文章です。 とても良い文章なのですが、現在リンク切れになっており、 とてももったいないことだと思ったので、日語に翻訳しました。 原文: How Goroutines Work (2017/12/02 現在、リンク切れ) golang の紹介 もしあなたが golang 初心者で、並行処理(Concurrency)と並列処理(Parallelism)の違いがわからなければ、Rob Pike 氏のトーク (リンク先は英語)を参照してください。約 30 分のトークですが、30分視聴するだ

    【翻訳】goroutine の仕組み - まるまるこふこふ
  • goddd とは何か? - pospomeのプログラミング日記

    これは Go Advent Calendar 2017 その2 6日目の記事です。 https://qiita.com/advent-calendar/2017/go2 みなさん、こんにちは。 pospome です。 普段は GAE/Go でサーバサイドの開発をしています。 twitter では 実装パターン, DDD, golang, GCP についてつぶやくことが多いので、 同じような分野に興味があれば、 フォローしてマサカリ投げてもらえると嬉しいです。 https://twitter.com/pospome ということで題に入ります。 golang.tokyo #9 で goddd という github リポジトリを知りました。 https://golangtokyo.connpass.com/event/65921/ ちょっと興味があったので、 goddd に対する自分の感想を書

    goddd とは何か? - pospomeのプログラミング日記
  • Goのパッケージ構成の失敗遍歴と現状確認

    この記事は Gunosy Advent Calendar 2017の5日目の記事です。前回の記事はGunosyのパーソナライズを支える技術 -ワークフロー編-でした。 GoAPIを書くときの問題僕の在籍するGunosyはGoを昔(?)から番採用しておりまして、ノウハウも潤沢に溜まっている企業だと言えます。 しかし、contextの扱いやベストなパッケージ構成、テスト、net/httpでAPIを書くノウハウなどなど、迷うことは多々あります。 これは弊社特有の事情ではなく、Goのサーバーサイドエンジニア全員にとっての問題です。中でも、パッケージ構成をどうすればいいのか(相互参照せずに快適に開発を進められるパッケージ構成とは)を見つけるのは結構難しく、各々のチームにお任せ、という状況です。 今回は上記の問題のうち、パッケージ構成に踏みこんで見たいとおもいます。会社でもよくパッケージ構成をどう

    Goのパッケージ構成の失敗遍歴と現状確認
  • Debugging an evil Go runtime bug

    Preface I’m a big fan of Prometheus and Grafana. As a former SRE at Google I’ve learned to appreciate good monitoring, and this combination has been a winner for me over the past year. I’m using them for monitoring my personal servers (both black-box and white-box monitoring), for the Euskal Encounter external and internal event infra, for work I do professionally for clients, and more. Prometheus

    Debugging an evil Go runtime bug
  • or-done-channelでコードの可読性を上げる - YAMAGUCHI::weblog

    はじめに こんにちは、キーボード自作おじさんです。このエントリはGo Advent Calendar 2017の4日目の記事です。 今年のエントリーは大作が並ぶアドベントカレンダーの休憩用のエントリーと思っていただければ幸いです。 Advent Calendar、小ネタでいいのよ。頑張り過ぎてネタ思い浮かばなくて穴開けるくらいなら575でもいいのよ。— mattn (@mattn_jp) 2017年11月29日 Goの並列処理のパターン Goが公開されてからもう8年になり、Goが得意とする並列処理にもGo特有のパターンなどがコミュニティ内で蓄積されてきました。 その中でもよく聞くものとしては for-select loop or-channel or-done-channel tee-channel fan-in, fan-out などがあります。今日はその中でも or-done-chan

    or-done-channelでコードの可読性を上げる - YAMAGUCHI::weblog
  • GoのInterfaceとは何者なのか #golang #go - niconegoto Blog

    はじめに これはGo Advent Calendar 2017 - Qiitaの3日目の記事です。 当初はコンパイラの最適化を話すつもりだったのですが… GoConでParallel Compilationの話をしたからコンパイラ最適化のところをアドベントカレンダーで出そうと思ってたんだけど結構内容が濃すぎてなんか間に合わなさそうな雰囲気を感じていているのでどうしようか考えている— 井手康貴/Koki Ide (@niconegoto) 2017年12月2日 こんな感じでつらいなということになり、アンケートを行いました。 というわけで何が読みたいのかアンケート— 井手康貴/Koki Ide (@niconegoto) 2017年12月2日 その結果、上記の通りInterfaceとは何なのかの記事を書くことになりました。(異論は認めません) コンパイラ最適化に関しては30%くらい書き進めてい

    GoのInterfaceとは何者なのか #golang #go - niconegoto Blog
  • Goroutineハンターが過労死する前に - Qiita

    Goroutineハンター、それは逃げ出したgoroutine達を捕まえるため、日夜戦い続けるエンジニア達のことである。Goroutineハンターは番環境でOOM Killerが発動するたびに呼び出され、逃げ出したすべてのgoroutineを捕まえるまで家にかえることが出来ない。しかし、あなたが書いた何気ないコードによって、今日もまた新しいgorutine達が野に放たれるのであった。 Goroutineリークとの戦い Goを使用してある程度規模のプログラムを書くと、必ず問題になるのがgoroutineのリークである。goで生まれたgoroutineが、何らかの理由で正常に終了しない場合、それは「リーク」していると見なされる。リークしたgoroutineはプロセスが続く限り永遠にリソースを手放さないため、リークしたgoroutineが蓄積するに従って、プログラムのパフォーマンスは低下してい

    Goroutineハンターが過労死する前に - Qiita
  • Automating Go development with Make

    Make is an old tool that you can use today to help get everyone on your team on the same page, and make it easy for new contributors to your project to get started. In some cases Make can help you avoid unnecessary work! Let’s see how you can integrate Make into your development workflow. For this example, we are going to pretend our application uses protocol buffers to send data back and forth. P