General-purpose Programming Language implemented with Go and LLVM. Presentation at Go Con Spring 2017
General-purpose Programming Language implemented with Go and LLVM. Presentation at Go Con Spring 2017
Go 1.8 から Graceful Shutdown 機能が標準で提供されるようになりました。これまではサードパーティーライブラリを使ってその機能を実装していた方も多いのではないでしょうか。 標準ライブラリにあるのだからサードパーティーライブラリから移行しようと考えている方も多いでしょう。私も少し前に移行を行ったのですが、移行前に使っていたサードパーティーライブラリと振る舞いが違うという話を同僚から聞いたので Go 1.8 の Graceful Shutdown の振る舞いについて調べてみました。 調査に使ったソースコードは以下になります。 https://github.com/t2y/misc/blob/master/go_graceful_shutdown_sample/main.go 基本的な使い方 context を使ってタイムアウト制御できるのが Go らしくて便利です。例えば
以前から本を買ったり気になっていたGo言語だけど、書き慣れてないし変更が多いと大変なので、使い所がなくPythonで全部済ましてしまっていた。 でも以前、Google Cloud PUB/SUBを使おうとした時、通信がHTTPSなのでレスポンスが遅く、WEBアプリ側から直接はとても使えないので、ローカルにRedisを立てて使っているのを思い出した。 cloud.google.com どのくらい遅いかというと、ローカルだと10ms以下で返せていたAPI的なものが、Cloud PUB/SUBへのpublishを入れると、そこの処理だけで片道20ms~50ms、遅いときは全体で100ms以上かかってしまっていた。 サーバー台数の節約と、ユーザー側のストレス軽減も考えて大量のアクセスを瞬時に捌きたいのに。 ローカルネットワーク内に立てたTCP接続のRedisのPubSubであれば遅くても数msなの
こんにちは、メルカリアッテのAPIチームでGoエンジニアをしている@sonatardです。 この記事は弊社ソウゾウの社員である@tenntennが運営しているgolang.tokyo #4のブログ枠として書いています。 golang.tokyo #4では、ゲストスピーカーとしてJetBrains社のSergey Ignatov氏にご登壇いただきGoglandをライブデモ形式で紹介して頂きました。 メルカリアッテではGoogle App Engine for Go (GAE/Go) を全面的に採用しており、サーバサイドエンジニアの中でもGoglandの利用者が増えています。そこでSergey Ignatov氏に紹介して頂いた機能とソウゾウ エンジニアたちが利用しているお気に入りの機能をまとめてご紹介したいと思います。 ソウゾウがGAE/Goを採用した経緯は@ttsuruokaのatte 開発
タイトルのOSSは ソースコードを公開している=OSSという解釈で付けています 作ったサービス URL: https://dotstamp.com/ 公開しているサービス内容自体は、この記事の本質では無いので、クオリティの参考程度だと思って下さい。 サービス云々の話はブログで記事にしているので、こちらをどうぞ( http://wheatandcat.hatenablog.com/ ) なので内容が、ただのオタクの掃き溜めなのはスルーして下さい 作ったサービスの内容 記事を投稿できる 書いた記事を読み上げる機能がある(読み上げはopen-Jtalk) SPAである サービスとして運営できる最低限の機能は実装済み(のはず) 公開ソースコード サーバーサイド ・https://github.com/wheatandcat/dotstamp_server クライアントサイド ・https://gi
概要 ANTLR ってのは,いわゆるパーサジェネレーターです. 去年の年末に出たバージョン 4.6 からターゲットに Go が追加されました 🙌 . かなり昔に使ったことあったんですが,v4 になってだいぶ整理されて洗練された感じになってました. この記事は結構適当にやってしまっていると思うので,ちゃんとやりたいならリファレンスを読んだ方がよさそうです(ぉ. The Definitive ANTLR 4 Reference 作者: Terence Parr出版社/メーカー: Pragmatic Bookshelf発売日: 2013/01/22メディア: ペーパーバックこの商品を含むブログを見る ANTLR の簡単な紹介 入力のあるプログラム書いていると,入力が well-formed であるかどうかをチェックする必要があることがあります. 正規表現とか使って自分で入力が正しいかどうかチェ
(この記事は Dave Cheney さんの Why Go? の翻訳です。) 数週間前、友人に「Goに注目に値するのはなんで?」と聞かれました。 彼は私がGoに情熱を注いでいることを知っていましたが、なぜ私が他の人もGoを気にするべきだと思っているのかを知りたいようでした。 この記事は、私がGoを重要なプログラミング言語だと考える、3つの大きな理由を紹介します。 メモリ安全 個人としては、私もあなたもC言語でメモリリークも危険なメモリの再利用もしないプログラムを書く事ができるでしょう。しかし、40年以上の経験から、集団としてのプログラマーはC言語で信頼できるプログラムを書けない事がはっきりしています。 コードの静的解析、 valgrind, tsan (訳注: たぶん ThreadSanitizer), -Werror といったツールは10年以上前から使えますが、それらのツールが広く認知さ
以下の記事を見て思わず膝を打った。 Goのarrayとsliceを理解するときがきた - Qiita なるほど! こういう風に説明すればいいのか。 というわけで,私も便乗してみる。 あくまでも私のための覚え書きである。 配列は常に「値」である まずはこんなコードを書いてみる。 package main import "fmt" type Array4 [4]int8 func main() { ary := Array4{0, 1, 2, 3} fmt.Printf("ary = %p\n", &ary) for i := 0; i < len(ary); i++ { fmt.Printf("%p: %v\n", &ary[i], ary[i]) } }
こんにちは id:kotamat です。 最近携わっているプロジェクトでgRPCを使った通信を行っているのですが、マイクロサービスを作る上で非常に使い勝手がいいので、使い方含めて紹介しようと思います。 gRPCとは HTTP/2を標準でサポートしたRPCフレームワークで、2015年にGoogleが発表しました。 デフォルトで対応しているProtocolBufferをgRPC用に書いた上で、サポートしている言語に書き出しを行うと、異なる言語のサーバー間でもある程度型堅牢に通信を行うことができます。 GoogleではプロトコルをProtoclBufferで書いているそうです。 このようにサーバーをC++, クライアントをRubyやAndroidJavaといった形で通信できます。 携わっているプロジェクトでは、ScalaからGoのプロジェクトに対してgRPCのリクエストを送り、レスポンスを取得し
This tutorial provides a basic Go programmer’s introduction to working with gRPC. Goal of this tutorial Define a service in a .proto file. Generate server and client code using the protocol buffer compiler. Use the Go gRPC API to write a simple client and server for your service. Recommended Books 1. Perquisites This requires Go 1.6 or later, ProtocolBuffers 3.0.0 or later // Ubuntu 16.04 $sudo ap
pecoに入った修正をみて、果たしてchanはいくつまで付けられるのか気になったので、 雑に試してみました。 先に断っておきますが、全く有用ではないですよ。 背景 pecoに入った修正はこちら(一部抜粋)。 Make Resume a blocking operation #411 diff --git a/interface.go b/interface.go index 3d4472f..fff446c 100644 --- a/interface.go +++ b/interface.go @@ -162,8 +162,8 @@ type Screen interface { // Termbox just hands out the processing to the termbox library type Termbox struct { mutex sync.Mutex -
ご無沙汰しています、最近リードエンジニアという称号がつきましたはるかさんです。2017/03/14に開催されたpixiv nighit #2でGoにおける画像ストリーム処理の話をしました。そのうちpixiv inside に詳細がのるとおもうので、一旦スライドだけ公開しておきます。 speakerdeck.com pixivの画像変換はほとんどGoで実装されていますが、実際はcgoの呼び出し箇所が多く、時間的には8割くらいCを書いていることになります。実際cgoの呼び出し箇所では面倒なことも多く、最終的にはすべてがGoの世界になるとうれしいんですが、全ライブラリ書き換えないといけないのでなかなか難しいところです。 ImageFluxはこのあたりのところを頑張ることで、うまいことやっていこうとしているので、ご興味あれば是非声をかけていただければと思います。 recruit.pixiv.net
オプション パッケージを作る際、柔軟性を持たせるためにオプションを持たせたい時がしばしばあります。 しかしオプションは知っての通り設定しないことが少なくありません。 単にコンストラクタに並べるようでは無用な複雑さをはらむことになります。 JavaなどではOptional Parameterなどのように、デフォルト値が指定できる機能があります。 機能の厳選されたgo言語ではそのような機能はありませんが、 "Self Referential Functions Design"というテクニックがあり、 それについての記事がRob Pike氏の記事を筆頭にいくつか説明されています。 オプションと相性が非常に良いため、合わせて"Functional Option Pattern"とも呼ばれています。 Dave Cheney氏の記事を参考におおまかに説明したいと思います。 様々な解決策 あるServe
オペレーティングシステムが実行ファイルを読み込んで実行するには、そのためのリソース(メモリやCPUなど)を用意しなければなりません。 そのようなリソースをまとめたプログラムの実行単位がプロセスです。 プロセスは、オペレーティングシステムが実行ファイルを読み込んで実行するときに新しく作られます。 コンピュータシステムの低レイヤをGo言語で覗いてみるこの連載では、今回から数回に分けてプロセスを見ていきます。 今回の記事で扱うのは次の内容です。 Go言語から見たプロセス プロセスの入出力 プロセスの情報にアクセスする外部ライブラリ OSから見たプロセス これまでの連載で登場したプロセス プロセスはコンピュータシステムの中心となる概念なので、その存在をまったく無視してシステムに関するプログラムを書くことはできません。 そのため、これまでの連載記事でも、プロセスに関連する情報は小出しにしてきました。
Note This post was updated on 2021-04-25. Go has a powerful built-in profiler that supports CPU, memory, goroutine and block (contention) profiling. Enabling the profiler # Go provides a low-level profiling API runtime/pprof, but if you are developing a long-running service, it's more convenient to work with a high-level net/http/pprof package. All you need to enable the profiler is to import net/
// スライスやマップは内部にlen、capの情報を独自に保持するため、 // nil(参照先のオブジェクトなし)でlen関数を行っても、実体を見ずに0が返ってくる感じ // 変だと思っていたが、スライスなどのフィールドの値がゼロ化されただけの正常な感じと解釈している v := map[string]string{} fmt.Println(len(v), v==nil) // 0, false var v2 map[string]string fmt.Println(len(v2), v2==nil) // 0, true スライスの構造 arrayへの参照 そのarrayのlen そのarrayのcap マップの構造 TODO インターフェイスの構造 TODO リテラル リテラル一覧 リテラルの種別 特徴
inabaです。 golang.tokyo #4に補欠からの当日滑り込み繰り上がりという運の良さで参加してきました。 会場はペアーズの株式会社エウレカさん。 倍率が2倍ということもあり、狭き門という印象のgolang.tokyoですが、今回から動画撮影も始まったようです。 次回のgolang.tokyoの前あたりに公開されるそうです。 自分も#2,#3と2回補欠だったのでこれは助かりますね!! ご紹介ありがとうございます! 後日https://t.co/Z00WxR8ZGcにて配信させていただきます。 よろしくお願いします|д゚)b #golangtokyo— crash_academy (@crash_academy) 2017年3月1日 また、@tenntennさんからブログ枠の紹介がありました。 毎回3名分のブログ枠が用意されていて、 先着順なので参加確定 まとめることで頭の中の整理
Golangの標準ライブラリだと、プロセスIDは取得できるみたいなのだけど、どうもプロセス名は取ってこれないらしい。 で、なんかいい方法ないかなと調べてたところ、『go-ps』というライブラリを見つけた。 これなら、プロセス名も取ってこれそうだ。 以下、実際にいじってみた際のコード。FindProcessの使い方は、基本的にはos.FindProcessとあまり変わらないみたいだ。 package main import ( "fmt" "os" "github.com/mitchellh/go-ps" ) func main() { pid := os.Getpid() pidInfo, _ := ps.FindProcess(pid) fmt.Println(pidInfo) fmt.Printf(" PID : %d\n", pidInfo.Pid()) fmt.Printf(" P
今回はConsumer-Driven Contract testingのサンプルを作ってみました。以前のSelenideを使ったE2Eの記事の流れからConsumer-Driven Contract testingも試してみようというモチベーションです。 Consumer-Driven Contract testingとは Consumer-Driven Contract(以下、CDC)で検索すると定義についての記事がたくさん見つかりますので詳細な説明は他の記事にお任せします。 Consumer-Driven Contracts testingを徹底解説! - Qiita Consumer-Driven Contracts: A Service Evolution Pattern CDCテストはmicroservice architectureをベースに複数のmicroserviceでサー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く