You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
こんにちは、サーバーエンジニアの牧野です。 今回はGoで開発しているアプリケーションでContinuous Profilingを実践するために導入した profefe を紹介したいと思います。 Continuous Profilingとは Continuous Profilingとは、ざっくり言うと本番環境で継続的にプロファイリングすることを指します。Continuous Profilingができると、本番環境でのみ発生するパフォーマンスの問題を捉えることができたり、継続的にプロファイリングすることで問題が発生する前後の状態を比較することができます。 Goには pprof というプロファイリングのための標準パッケージがあり、プロファイリング自体は容易に行うことができますが、Continuous Profilingを実現するとなると、以下のような課題と向き合う必要があります。 本番環境でオー
2022年8月、Go 1.18対応版にアップデートしました 久しぶりのGoネタです。Go 5 Advent Calendar 2020の18日目が空いていたので書きました。 Goで実装されたコマンドでは、ビルドした時点のバージョンを埋め込むため以下のようなMakefileを用意することがあると思います。 .PHONY: build build: go build -ldflags '-X main.Version=$(VERSION)' しかしこの方法では、go installなどMakefileを経由せずビルドしたバイナリには適切なバージョンが埋め込まれない問題があります。個人的な意見では、可能な限りgo getでインストールできる状態を維持した方が良いと思っていますが、バージョンを埋め込むためには他に方法がないので仕方がないと理解していました。しかしGo 1.19現在、runtime/
はじめに この記事は Go Advent Calendar 2020 18 日目の記事です。 普段 Gin をよく使用しているのですが、ふとコミットしたくなり issue を漁っていたら運良くコミットできました。 修正内容はちょっとしたものですが、私の PR がマージされるまでにどんなことをしたのかまとめたいと思います。 Gin とは Gin は最もスター数の多い Go の Web フレームワークです。 参考:Top Go Web Frameworks Django や Ruby on Rails のようなリッチなものではなく、必要最低限の機能が備わったシンプルなフレームワークとなっています。 package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/nyan", func
すみません、ISUCONのアレに火がついてしまったので..。 Advent Calendarとはとくに関係がありません。 qiita.com qiita.com こちらの記事をみて、気になってしまったので interpolateParams の追加とMySQLチューニングをしてベンチマークを回してみました。 ベンチマークの環境が公開されているのは素晴らしいですね。 github.com 8vCPU/16GB Memのc5a.2xlargeなEC2のインスタンスを起動して、以下の手順にしたがってdockerとdocker-composeをインストールしました。OSはUbuntu 20.04を使いました。 docs.docker.com docs.docker.com 上記のbenchmarkのrepositoryをgit cloneし、compose build && compose upし
この記事はGo Advent Calendar 2020 16日目の代打記事です。奇しくも16日目にGo1.16の話をすることになりました。 【追記】タイトル改題しました 状況が落ち着いてだいぶ経ったのと、未だに多くの方にこの記事を見ていただけていることから、Go1.16での変更というより、今を生きる私達がどうすればいいか、という点にフォーカスしたタイトルに改題しました。本文に変更はありません。一応注記すると、go get が廃止になったわけではなく、普段の開発フローで使うことはまずなくなった、という意味です。(一通り読んでいただければお分かりいただけるかと。) 【追記】Go1.18について ついに待望のGo1.18がリリースされましたね! https://go.dev/doc/go1.18#go-command そして予告通り go get によるインストール機能は削除されました。どうし
Go go-plugin × gRPC で自作Goツールにプラグイン機構を実装する方法 go-pluginパッケージを使ってgRPCプラグイン機構を提供する方法を調べたので紹介します。 Overview こんにちは pon です。これはGo 2 Advent Calendar 2020 の15日目の記事です。 自作ツールに素敵なプラグイン機構を仕込みたいことありますよね。今回はTerraformやPackerなどでプラグイン機構をして利用されているパッケージであるhashicorp/go-pluginの使い方を紹介し、実際にどのように実装するかをコードをあげて紹介します。 go-pluginとは go-pluginは、RPCを介したGoのプラグインシステムです。 TerraformなどHashicorpの様々なOSSの内部でも使われているので実績は抜群です。RPCを介すると言いますがローカ
この記事は Go 2 Advent Calendar 14日目の穴埋め記事です。 はじめに @okdyy75 さんによる Go 5 Advent Calendar 14日目の の記事「だから僕はGo言語を辞めた」 が「ベンチマークっていうのはこうやるんだよ」というのを説明するために反面教師的な意味で良い教材だと思ったので、反証記事を書きたいと思います。 ベンチマークを取りながらコードを改善して、最終的にGoは遅くないからやめる必要はないということ、そして、なぜ遅いという結論になってしまったのかを掘り下げていきたいと思います。 下準備 幸いなことに、ベンチマークのソースコードがGitHubにある ので、こちらを実行しながら問題点を改善していきましょう。 ちゃんとコードが上がっているのは素晴らしいですね! 一方で、元記事には測定環境が明記されていませんでしたので、同じ環境で測定することはできま
初めまして。株式会社カミナシPMの@gtongy1です。 Dockerというツール。SRE, Backend, Frontendどの領域のエンジニアも馴染みのあるツールではないでしょうか。 コンテナを利用することにより、インフラの環境を一つの空間に梱包し、その内部で柔軟に様々な環境を作ることが出来ます。 コンテナの実体とはなんなのでしょう? 叡智が詰め込まれたそんな一つの宝箱のように見えます。 「 コンテナ作ってみたくなりませんか? 」 僕と同じように知的好奇心をくすぐられたそこのあなた!コンテナ沼の一歩目を一緒に踏み出してみましょう! 検証環境 Ubuntu 18.04 golang 1.15 Dockerの機能おさらい docs.docker.com まず、ドキュメント内を読み進めてDockerに対する知識を整理します。 DockerはDocker daemonを基幹とし、その呼び出し
Merpay Advent Calendar 2020 の15日目は、メルペイスマート払いの開発を担当しているCredit Designチーム/Backend Engineer の 柴田 がお届けします。 はじめに 私が1984年に社会人になった頃は、ソフトウェア開発を行うためには会社に行くしかありませんでした。当時は、共用のVAXマシンで4.2/4.3 BSD Unixを使って開発していました。その後は、コンピュータハードウェアの発達に伴い、開発者ごとにワークステーションを用いて開発するようになり、デスクトップPCを用いた開発、そして今日のMacBook ProといったノートPCによる開発と時代が変わってきています。 2000年代には、安価で高性能なコンピュータの恩恵により、テスト駆動開発が徐々に広まってきました。そして、継続的インテグレーション(Continuous Integrati
Rails の問題は Rails のベストプラクティスがフロントエンドのベストプラクティスの邪魔になるどころか全く逆方向で相反してる点です。DHHの思想がフロントエンドと根本的に逆行してる。そういう人が作るフレームワークなのでwebpackerの抽象化を根本的に間違ったりする。 — prev.js (@mizchi) December 1, 2020 昨日もリプライで少し書いたけど、DHH自体が直近のHeyの開発でも明確にJavaScriptというものを触れないようにすることを是としているような主張をしているので、DHH wayが色濃く反映される以上この状態はもう避けられない気がしている — potato4d / Takuma HANATANI (@potato4d) December 1, 2020 Railsがフロントエンドの最先端をゆく人々1から良く思われないのは事実として。 Vie
はじめに 本記事は、 DeNA Advent Calendar 2020 の 11 日目の記事です。 突然ですが、「コンパイラのコードを読んでみよう」なんて言われても、「どうせ巨大で難解で複雑なロジックを理解しないと読めないんでしょ?」と思いませんか。 コンパイラの構造を理解しようとしても聞いたことのないような専門用語がずらりと並び、コードを読もうとしたらそれらをすべて完全に理解してないと一行も理解できないんじゃないか...。Go のコンパイラ gc のソースコードを読むまでは、私もそう思っていました。 しかし、あまりにも暇な休日のある日、思い立って gc のコードを読んでみました。すると、「コンパイル」という難解な響きの処理も、一つひとつを小さなタスクに分解することで、少しずつ読み進めることができると分かったのです! 何よりも感動したことは、 gc そのものが全て Go で書かれていて、
こちらは Goクイズ Advent Calendar 2020 - Qiita の10日目の記事です。 問題 今回は、皆さん大好きなiotaの問題です。 package main import "fmt" const ( X = 0 A, B, C = iota, iota + 1, iota * 2 D, _, E _, F, _ G = iota + iota ) func main() { fmt.Println(D + E + F + G) } さて、答えはどれでしょう? compile error 12 18 24 解答 https://play.golang.org/p/6c_X0VSSul4 正解 スクロールした先にあります! ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 正解は、3の 18 です。 解説 iotaについて考える時、気にしないとい
はじめに これは Go 4 Advent Calendar 2020 8日目の記事です。 Goのテストにおいて、構造体を含めて型の値を比較したいという場合は往々にしてあります。ロジックの結果はなんらかの値として作用することが多いですから、型の値を比較したい、というのは自然です。私は型の値が等価であるかどうか判定するために、go-cmp というライブラリを使うことが多いです。 github.com しかしGoにおける等価性の仕様は決まっていますし、標準ライブラリの reflect パッケージにも DeepEqual という deeply equal, かどうか判定するメソッドがあります。そこで本記事ではなぜわざわざ go-cmp を使っているのかという理由と、go-cmp を使ったときにどのようにして使うか?という go-cmp の使う上でよく使う以下のTipsを提供したいと思います。 Ti
この記事は Retty Advent Calendar 2020 2日目の記事です。 adventar.org はじめに マネージャーの常松です。 2020年10月1日に始まったGo To EatキャンペーンではRetty内の開発責任者をつとめ、胃が痛い日々をここ数ヶ月過ごしていました。 本記事ではキャンペーンを裏から支えてくれたサービス Voucherifyを紹介します。 Go To Eatキャンペーン "オンライン飲食予約"の仕組み Go To Eatキャンペーンは農林水産省主導のキャンペーンで「プレミアム付き食事券」と「オンライン飲食予約」の2つから構成されます。 Rettyが参加したのは後者のオンライン飲食予約です。 農林水産省 Go To Eatキャンペーンでの説明図を引用 オンライン飲食予約サイト経由で、キャンペーン期間中に予約・来店をしたお客様に対し、次回以降にキャンペーン参
この記事は Go 4 Advent Calendar 2020 1日目の記事です。 激しい議論を呼んだことで有名な Go 2 の type generics は、Go 2 → Go 1 translator である "go2go" を介して既にお試しできる状態になっている。 この記事は、Go 2 における type generics のありようについて述べたり議論したりするものではない。お試しできるようになった今、それがどのような雰囲気で、どのように実用できそうかといった個人的感想を紹介する。どうぞ気軽に読んでほしい。 tl;dr Type generics の使い心地は思ったより良い 各種制限も妥当に設定されているように思える Go 1 に translate されたソースコードの見た目は素朴で直感的 今まで冗長に書かざるを得なかった部分を安全に短くするのに使えそう Python の i
こんにちは、テックリードの夏です。 今年4月にCTOからテックリードに肩書が変わり、ガリガリコードを書くようになりました。 背景については、こちらをご覧ください。 www.wantedly.com 普段はプロダクト側の機能開発と、サーバ側の基盤開発を半々ぐらいの割合で仕事しています。 一口にサーバ側の基盤開発といっても定義が曖昧なのですが、基本的にはこんな感じのタスクをやっています。 インフラコストの最適化 不正なアクセスからの防御 障害の再発防止 新技術の導入やアーキテクチャの整備 今回はこのうち「新技術の導入やアーキテクチャの整備」の中で、サーバサイドをGo + Clean Architectureで再設計したことについてお話したいと思います。 背景 ミラティブは2015年春頃に開発が始まり、同年8月にサービスがリリースされ、2020年8月で5周年を迎えました。 その過程で組織やプロダ
はじめにこんにちは。TIG/DXユニットの富山です。 私の使用するテキストエディタはVim一択でしたが、最近はVSCodeに浮気気味です。(言わずもがな Vimプラグインは入れています) 今回はVSCodeでGo言語用のデバッグ環境をテーマします! 環境構築前提条件: VSCodeがインストール済であること Goがインストール済であること Step 1:プラグインのインストールGoogleが公開しているVSCode用のGoプラグインである、Go for Visual Studio Codeをインストールします。(2020年6月に開発管理がMicrosoftからGoogleのGo開発チームへ移管されました)。 インストールが終わったら、Goプラグインに必要な各種ツールをインストールしていきます。 コマンドパレットを開く(Windows: Ctrl + Shift + p / Mac: Com
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く