タグ

関連タグで絞り込む (220)

タグの絞り込みを解除

Goに関するMukeのブックマーク (143)

  • Goのpackage構成と開発のベタープラクティス

    (images: github.com/egonelbre/gophers) こんにちは。 データエンジニアリンググループ(CETチーム)の寺下です。 自分の所属するCETチームでは今まで主にScalaPythonなどを使ってAPIや基盤を実装してきましたが、最近では徐々にGoによる実装も増えてきており、GAE/GKE上で番運用を行っています。 記事ではGoのプロダクトにおいてDDDライクなpackage構成で実装する際の注意点や、汎用的に通用するであろう実装のTipsについて書いていきます。 記事で紹介する例がベストプラクティスだというわけではありませんので、あくまで実装の一例程度に捉えて頂けると幸いです。 Goのアーキテクチャ Goは言語仕様がシンプルかつフォーマッタが強力なため、syntaxレベルでは開発者によってコードの品質がブレにくいというメリットがあります。 しかしなが

    Goのpackage構成と開発のベタープラクティス
  • Go における FunctionalOptionPattern と MethodChaining について考える - pospomeのプログラミング日記

    きっかけ FunctionalOptionPattern MethodChaining MethodChaining の問題点 Error フィールドによる解決方法 Error フィールドによる解決方法の問題 1. 各メソッドでエラーが発生しないような印象を受ける 2. エラーチェックを忘れそう その1 3. エラーチェックを忘れそう その2 FunctionalOptionPattern による解決方法 MethodChaining としての解決方法 Error フィールドの問題点は当に問題なのか? どちらを使うべきなのか? まとめ きっかけこの記事を書くきっかけは以下のブログで、 MethodChaining の代わりに FunctionalOptionPattern を利用したという記事。 https://www.calhoun.io/using-functional-option

    Go における FunctionalOptionPattern と MethodChaining について考える - pospomeのプログラミング日記
  • Glide から Dep への移行を検討する

    (この記事は Qiita とのマルチポストです。 まぁ,向こうは草稿版だけど) 久しぶりに glide を使おうと最新版(0.13.0)を見に行ったら “Consider switching to dep” とか書いてあるじゃない。 Glide is used by a great number of projects and will continue to get support for some time. But, the near future is likely in dep. dep can handle importing Glide config files. Please consider trying dep on your project or converting to dep. まじすか。 つまり「依存関係(Vendoring)管理ツールとしては dep を推奨

    Glide から Dep への移行を検討する
  • goで書いたコードがヒープ割り当てになるかを確認する方法 · hnakamur's blog

    2018-01-30 はじめに Allocation Efficiency in High-Performance Go Services · Segment Blog という記事を読みました。素晴らしいのでぜひ一読をお勧めします。 この記事は自分の理解と実際に試してみた結果のメモです。 一番のポイントは go build -gcflags '-m' のようにオプションを指定してビルドすればコードのどの箇所でヒープ割り当てが発生したかを確認できるということです。 pprof や go test -benchmem でもヒープ割り当ての発生回数は確認できますが、上の方法ではコードのどこ(何行目の何カラム目)でヒープ割り当てが発生したかとなぜ発生したかの理由を確認できます。 元記事の内容メモ 冒頭にあげた記事を読んで私が理解した内容のメモです。 元記事の全ての内容を書いているわけでないので、元

  • Golang testingことはじめ(3)〜アプリケーションのテスト〜 - DeNA Testing Blog

    こんにちは。 2回にわたってGolang標準の testing パッケージを使ったユニットテストについてお伝えしてきました。 testingパッケージを使ったユニットテスト(testing) テストにおける共通処理(testing) アプリケーションのテスト(gomock, httptest) 今回はGolangで作成したアプリケーションをテストする際に利用できるライブラリなどについて紹介します。 この文章中に登場するサンプルは GitHub にありますので、実際に動作させることが可能です。 $ go get github.com/duck8823/sample-go-testing $ cd $GOPATH/src/github.com/duck8823/sample-go-testing $ git checkout refs/tags/blog $ dep ensure # 依存パッ

    Golang testingことはじめ(3)〜アプリケーションのテスト〜 - DeNA Testing Blog
  • AWS Lambda Go without Go - so what

    とある勉強会用にLTネタを作っていたのですが、発表できなくなったので腐る前にブログに書いておきます。 お前は何を(ry 記事のタイトルについて お前は何を言っているんだ なのですが、元ネタは以下のツイートです。 ここからTCPでやり取りするプロトコルが読み取れるし、mainって名前で同じプロトコル喋るバイナリならstaticにビルドすれば別の言語でもネイティブに動かせるんじゃね?https://t.co/dWjs8YiuFe— Masashi Terui (@marcy_terui) 2018年1月17日 LTのネタになりそうだったのでやってみたわけです。 aws-lambda-goについて じゃあ、まあaws-lambda-goは一体どういう仕組みで動いているんだろうと、ソースを読んでみました。 で、entry.goとfunction.goあたりでだいたい分かりましたが、net/rpc

    AWS Lambda Go without Go - so what
  • 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の実行状況を可視化する - ( ꒪⌓꒪) ゆるよろ日記
  • hatebu.me

    This domain may be for sale!

    hatebu.me
  • 意図的にプログラムの動きをランダムにしてバグを早期発見するテクニックについて|Rui Ueyama

    プログラムを書いていると、素直に実装した結果として毎回特定の条件が満たされているけど、来それは誰も保証してないという場面に出くわすことがよくある。保証されていない偶然の動作に依存することで生じるバグというのはかなり多い。 例えば最近では、ドラゴンボールZ ドッカンバトルというゲームで、2回SQL文を実行した結果が同じ順序で並んでいるという誤った期待をしているコードがあったせいで、ガチャの確率表示がめちゃくちゃになってしまって、運営が確率操作しているのではないかという騒動が発生したことがあった [1]。データベースでは空のテーブルにデータを追加してその直後に読み返すと、データを追加した順番に結果が返ってきたりしがちなので、問題のコードはきれいなテスト環境では偶然うまく動いてしまったのだろうと思う。 上のようなバグを防ぐために最近よく使われているのは、来保証しないところをわざと壊すという方

    意図的にプログラムの動きをランダムにしてバグを早期発見するテクニックについて|Rui Ueyama
  • go-sqlrow

    この記事はGo2 Advent Calendar 2017 13日目の記事です。 昨日は@kami_zh さんの Goで標準出力をキャプチャするパッケージを書いた でした。 go-sqlrowGo言語で標準パッケージを使用してRDBMSからデータを取ってくるには、以下の様に書きます1。 type Person struct { ID string Name string } db, _ := sql.Open("dn", "dsn") row, _ := db.Query(`SELECT id, name FROM person where id='foo'`) var p Person row.Scan(&p.ID, &p.Name) SQL文を発行するまではいいのですが、最後の行、sql.Row#Scanがくせ者です。 上記の例のように、sql.row#Scanは可変長個のポインタを引

    go-sqlrow
  • 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
  • Goのパッケージ構成の失敗遍歴と現状確認

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

    Goのパッケージ構成の失敗遍歴と現状確認
  • 100万回のWebSocket接続とGo | POSTD

    こんにちは。私はSergey Kamardin(セルゲイ・カマルディン)です。Mail.Ru(ロシアの電子メールサービス会社)で開発者をしています。 この記事では、どのように私がGoを使って高負荷対応のWebSocketサーバを開発したかについて説明したいと思っています。 パフォーマンス最適化のアイデアやテクニックを通じて、WebSocketの知識はあるもののGoについてはほとんど知らないという方のお役に立てれば幸いです。 1. はじめに まずは開発に至った経緯について、どうして私たちがこのサーバを必要としたのかを説明しておきましょう。 Mail.Ruには多くのステートフルなシステムがあります。ユーザのeメール保存もその1つです。システム内、およびシステムイベントの状態変更を追跡する方法にはいくつかの種類がありますが、それらは主に状態変更に関するシステム通知、または周期的なシステムのポーリ

    100万回のWebSocket接続とGo | POSTD
  • Go + Travis CI + Coveralls でCI環境を作る - Qiita

    language: go go: - tip before_install: - go get github.com/axw/gocov/gocov - go get github.com/mattn/goveralls - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi script: - $HOME/gopath/bin/goveralls -repotoken とーくん -repotoken にはCoverallsで取得できるトークンを設定する。 Tokenを暗号化してセキュアにする ここからがハマりどころだった。 -repotoken にトークン渡せば良いのだが、YAMLファイルにトークンベタ書きは良くない。 Coverallsには Note

    Go + Travis CI + Coveralls でCI環境を作る - Qiita
  • golang で始める Slack bot 開発 - at kaneshin

    この記事は Slack Advent Calendar 2016 - Qiita の3日目の記事です。 昨日は Kinoppyd さんの「今そこにあるSlack」でした。 さて、今回、この記事では golangSlack bot を実装する方法を紹介しようと思います。 世に蔓延る Slack bot これから bot を世に放とうとしている人は、是非、1日目と2日目の記事を読み、事前知識を頭に叩き込んでおくと良いと思います。 Slackで業務チャンネルの平穏を維持するbot、そして人間のトークンをbotに与える話 - Qiita 今そこにあるSlack的に、自身で作成した bot はもちろん好きになると思いますが、人によっては理解不能な bot や、意味不明な場面で反応したりと、「邪魔だな」と思われてしまうことがあります。そのため、bot を開発する人は「謙虚・尊敬・信頼」(T

    golang で始める Slack bot 開発 - at kaneshin
  • GolangでSlack Interactive Messageを使ったBotを書く - Mercari Engineering Blog

    SREの@deeeet です。 MercariではSlack Botを使い様々な業務の自動化を行っています。例えばメインのAPIのReleaseはBotによる自動化がされており、JPとUSとUKの3拠点で1日に10回以上のReleaseをSlack上で実現しています(これ以外にも多くの事例があります)。 これまでのSlack Botは基的には文字ベースでのやり取りが普通でした(グラフなどの画像を返答として利用することはあります)が、SlackはよりInteractiveなやりとりを実現できるInteractive Messageという仕組みも提供しています。これによりButtonによる決定やMenuによる選択といったアクションをユーザにとらせることができるようになります。 Buttonの仕組み自体は古くから提供されていましたが他のTeamへの配布が前提でありOAuthの仕組みを準備する必

    GolangでSlack Interactive Messageを使ったBotを書く - Mercari Engineering Blog
    Muke
    Muke 2017/11/24
    “Internal Integration”
  • Golang + echoなREST APIサーバで、テスト実行時に自動でAPIドキュメントを生成できるようにする - 一から勉強させてください

    最近、Golang (+echo) で REST API サーバを開発する機会があったのですが、テストを書いたら API ドキュメントを自動生成するような仕組みを作るために試行錯誤したのでメモです。 方針 API ドキュメントの生成にはtest2docを利用 テストを実行すると API Blueprint 形式でファイルを自動生成してくれそう 該当するメソッドの上にコメントを書くことで最低限の説明は記述できそう README には gorilla/muxと julienschmidt/httprouterのサンプルしか載っておらず echoでうまく動くかは試してみるしかなさそう テストから生成された .apibファイルをaglioみたいなツールにかませば HTML ファイルとして API ドキュメントができそう プロジェクト構成 github.com/danimal141/rest-api

    Golang + echoなREST APIサーバで、テスト実行時に自動でAPIドキュメントを生成できるようにする - 一から勉強させてください
  • Gunosy広告配信を支えるGo ~キャッシュ編~ - Gunosy Tech Blog

    広告技術部の今川です。 わたしは主にGoを使って広告配信APIの改修を担当しています。 今回はAPIの高速化のためにキャッシュを使った話をご紹介します。 データベースへのアクセス頻度を減らすための努力 広告技術部では、広告配信APIのCTRの予測で利用する特徴ベクトルをAmazon Auroraに保存しています。 しかし、単純にデータ取得時に毎回Auroraに問い合わせていては処理速度が遅くなってしまうので、以下の二種類の方法で高速化を図っています。 1. キャッシュする 予測ロジックで利用するデータの中でも、ユーザーに関するベクトルはユーザーIDをキーにユーザー数だけのデータが存在する反面、すべてのユーザーが同じ時間帯にアクセスするとは限らず、一度訪問したユーザーが続けて何回もアクセスする場合が多いという特徴があります。 このため、利用したいデータがキャッシュに無ければAuroraに問い

  • なぜ私達は Python から Go に移行したのか - Frasco

    新しい言語に移行するのは常に大きな決断です。その言語をよく知る人がチームメンバーに1人しかいない時などは特にそうです。今年の初め、我々は Stream の主要言語を Python から Go に切り替えました。この記事では、なぜ私達が Python から Go に移行しようと決断したのか、その理由を説明します。 Go を使う理由 理由1 - パフォーマンス Go は速いです! Go は極端に速い。そのパフォーマンスは Java もしくは C++ に匹敵します。私達のユースケースでは、GoPython より30倍速いです。GoJava を比較したベンチマークはこちらです。 理由2 - 言語パフォーマンスの問題 多くのアプリケーションにとって、プログラミング言語は、単にアプリとデータベースを繋ぐものにすぎません。言語そのもののパフォーマンスは通常あまり重要ではありません。 しかしな

    なぜ私達は Python から Go に移行したのか - Frasco
  • Shibu's Diary: ASCII.jpの連載「Goならわかるシステムプログラミング」がパワーアップして書籍化されます

    Real World HTTPに引き続き今年2冊目の書籍が出版されます。ASCII.jpの連載をまとめて、加筆修正したものになります。最初は、連載をつなげて、はじめに、と次回予告を書き換えてつなげればOKという感じからスタートしましたが、章構成を書き換えたり、書き始めのときに「そのうち連載で触れる予定です」を「◯◯章で説明します」に書き換えたり、せっかくだから内容を追記しようとか考え始めたり、レビューアのメンバーが「これは並列・並行の結果であって原則とは違う」みたいな細かい定義のところまで指摘してくれて説明を大幅に書き換えたり、蓋を開けたら前から最後までかなり時間をかけて修正することになりました。せっかく転職で有給消化が一ヶ月あったのですが、この原稿の修正で一ヶ月がするっと溶けました。 11/16追記 Amazonでも販売がはじまっています! 大きな修正ポイントは次の通りです: 連載の分量

    Muke
    Muke 2017/10/20