scrapboxとは? 知らない人もいるかもしれないので一応前置き。scrapboxはなんか共同編集できるwikiみたいなサービス。 Gyazo作ったところが作ってる。scrapbox.ioscrapboxを使うとラバーダッキングができる ラバーダッキングとは 開発中にどうしようもなくハマってしまい動くと思ってるものが動かない。そんな時ありますよね。 例えばこんな会話 ぼく 「なんかコンパイルエラーがとれなくてちょっと見てもらってもいいですか?」 同僚 「いいですよ。」 ぼく 「○○な処理ができるように、こういう書き方をしてるんですが、コンパイルが通るはずが通らなくて。」 同僚 「ふむふむ。」 ぼく 「この処理を実行するには、△△というライブラリをimportしないといけないんですが、あっ!!」 同僚 「ん?」 ぼく 「importが抜けてました!!」 こうやって人に説明してると、頭

(この記事は Qiita とのマルチポストです。 まぁ,向こうは草稿版だけど) 久しぶりに glide を使おうと最新版(0.13.0)を見に行ったら “Considerswitching 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 を推奨

2018-01-30はじめにAllocation Efficiency in High-PerformanceGo Services · SegmentBlog という記事を読みました。素晴らしいのでぜひ一読をお勧めします。 この記事は自分の理解と実際に試してみた結果のメモです。 一番のポイントはgobuild -gcflags '-m' のようにオプションを指定してビルドすればコードのどの箇所でヒープ割り当てが発生したかを確認できるということです。 pprof やgo test -benchmem でもヒープ割り当ての発生回数は確認できますが、上の方法ではコードのどこ(何行目の何カラム目)でヒープ割り当てが発生したかとなぜ発生したかの理由を確認できます。 元記事の内容メモ冒頭にあげた記事を読んで私が理解した内容のメモです。 元記事の全ての内容を書いているわけでないので、元記事も
こんにちは。 2回にわたってGolang標準の testing パッケージを使ったユニットテストについてお伝えしてきました。 testingパッケージを使ったユニットテスト(testing) テストにおける共通処理(testing) アプリケーションのテスト(gomock, httptest) 今回はGolangで作成したアプリケーションをテストする際に利用できるライブラリなどについて紹介します。 この文章中に登場するサンプルはGitHub にありますので、実際に動作させることが可能です。 $go getgithub.com/duck8823/sample-go-testing $ cd $GOPATH/src/github.com/duck8823/sample-go-testing $ git checkout refs/tags/blog $ dep ensure # 依存パッ
こんにちは。Golangが一般的に使われるようになってきてもう久しいですね。 最近作られたSWET製のツールでも、Golangを採用したものがあります。 そこで、Golangの標準テストパッケージtestingやその他についてまとめたいと思います。 今回から3回にわたり、 testingパッケージを使ったユニットテスト(testing) テストにおける共通処理(testing) アプリケーションのテスト(gomock, httptest) を紹介します。 この記事を読んで一通りGolangでテストがかけるようになると嬉しいです。 この文章中に登場するサンプルはGitHub にありますので、実際に動作させることが可能です。 $go getgithub.com/duck8823/sample-go-testing $ cd $GOPATH/src/github.com/duck8823

普段は GAE でgolang を使っているけど、golang でmysql 使ったことないってのもどうなのかな? と思ったので、 ちょっとしたサンプルアプリを通してmysql を使ってみようと思った。 で、ORM どーしーよーかなと思って、 色々調べた記録です。 標準パッケージORMに求める要件 structにマッピングできる テーブル名とかstructに変な命名規則を適用させる必要がない 生SQLが書ける 発行されるクエリがイメージできる パフォーマンスが極端に悪くないgormgorpdbr xorm この記事を書いた後に知ったORMsqlboiler おすすめは? 結局何を使ったのか? 標準パッケージ標準パッケージが良い感じであれば、ORM は不要だと思ったので確認してみた。 標準パッケージではdatabase/sql を利用する。 https://golang.
こんにちわ。しいたけです。今日は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

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

この記事は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 Advent Calendar 2017 - Qiitaの3日目の記事です。 当初はコンパイラの最適化を話すつもりだったのですが…GoConでParallel Compilationの話をしたからコンパイラ最適化のところをアドベントカレンダーで出そうと思ってたんだけど結構内容が濃すぎてなんか間に合わなさそうな雰囲気を感じていているのでどうしようか考えている— 井手康貴/Koki Ide (@niconegoto) 2017年12月2日 こんな感じでつらいなということになり、アンケートを行いました。 というわけで何が読みたいのかアンケート— 井手康貴/Koki Ide (@niconegoto) 2017年12月2日 その結果、上記の通りInterfaceとは何なのかの記事を書くことになりました。(異論は認めません) コンパイラ最適化に関しては30%くらい書き進めてい
これは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 に対する自分の感想を書
この記事は Gunosy Advent Calendar 2017の5日目の記事です。前回の記事はGunosyのパーソナライズを支える技術 -ワークフロー編-でした。GoでAPIを書くときの問題僕の在籍するGunosyはGoを昔(?)から本番採用しておりまして、ノウハウも潤沢に溜まっている企業だと言えます。 しかし、contextの扱いやベストなパッケージ構成、テスト、net/httpでAPIを書くノウハウなどなど、迷うことは多々あります。 これは弊社特有の事情ではなく、Goのサーバーサイドエンジニア全員にとっての問題です。中でも、パッケージ構成をどうすればいいのか(相互参照せずに快適に開発を進められるパッケージ構成とは)を見つけるのは結構難しく、各々のチームにお任せ、という状況です。 今回は上記の問題のうち、パッケージ構成に踏みこんで見たいとおもいます。会社でもよくパッケージ構成をどう

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

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

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 (+echo) で RESTAPI サーバを開発する機会があったのですが、テストを書いたらAPI ドキュメントを自動生成するような仕組みを作るために試行錯誤したのでメモです。 方針API ドキュメントの生成にはtest2docを利用 テストを実行するとAPIBlueprint 形式でファイルを自動生成してくれそう 該当するメソッドの上にコメントを書くことで最低限の説明は記述できそう README にはgorilla/muxと julienschmidt/httprouterのサンプルしか載っておらず echoでうまく動くかは試してみるしかなさそう テストから生成された .apibファイルをaglioみたいなツールにかませばHTML ファイルとしてAPI ドキュメントができそうプロジェクト構成github.com/danimal141/rest-api
広告技術部の今川です。 わたしは主にGoを使って広告配信APIの改修を担当しています。 今回はAPIの高速化のためにキャッシュを使った話をご紹介します。 データベースへのアクセス頻度を減らすための努力 広告技術部では、広告配信APIのCTRの予測で利用する特徴ベクトルをAmazonAuroraに保存しています。 しかし、単純にデータ取得時に毎回Auroraに問い合わせていては処理速度が遅くなってしまうので、以下の二種類の方法で高速化を図っています。 1. キャッシュする 予測ロジックで利用するデータの中でも、ユーザーに関するベクトルはユーザーIDをキーにユーザー数だけのデータが存在する反面、すべてのユーザーが同じ時間帯にアクセスするとは限らず、一度訪問したユーザーが続けて何回もアクセスする場合が多いという特徴があります。 このため、利用したいデータがキャッシュに無ければAuroraに問い
こんにちは。増田(id:masutaka26)です。社内勉強会の順番が来ると、2ヶ月前くらいからソワソワしてきます。 そんなわけで今回は『日報をgolang で支える技術』というお題で発表しました。 発表の内容 以下、スライドからの抜粋です。 背景など 以前の社内勉強会でgithub-nippou という gem を紹介した ひとつのruby スクリプトからそこそこ作り込み、毎日便利に使っている 先日も同僚の @ryz310 から pull request をもらって、さらに便利になった からの、golang への書き換えをした。その場でライブリリース モチベーション 以前 hub コマンドがruby からgolang に移行したのを見て、一度やってみたかったrubygems の CLI をDockerize してポータビリティを高めるのは何かが違うという気持ち @ryz31

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く