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.
先日 xerrors パッケージがリリースされました。 このパッケージは、Proposal: Go 2 Error Inspection で提案されているものをGo1向けに外部ライブラリとして試験的に実装したものです。 Goの標準ライブラリではありませんが、Go公式がメンテナンスをしています。 このパッケージができた背景は、今まで多くのGoエンジニアは下位層のエラーの情報を伝播させるために pkg/errors パッケージ などの外部ライブラリを利用していました。この手法が開発者の間で普及したため標準ライブラリで正式に検討を始めることとなりました。 2019/9/4更新 Go 1.13では %w でのラップや Is メソッド、 As メソッドは正式に導入されました。 しかし%+w や %+v によるスタックトレースの表示の採用は見送られました。 スタックトレースの表示が必要な場合はxerr
API GatewayによるMicroservices化 mercari.go#1 3 July 2018 Taichi Nakashima About me @deeeet / @tcnksm (GitHub) Blog on deeeet.com Tech lead at Mercari microservices platform team 2 Mercari Meetup for Microservices Platform 7/19 遊びに来てくれ! https://mercari.connpass.com/event/92168/ 3 tl;dr Mercari Microservices化のために開発したAPI Gatewayについて紹介する. API Gatewayとは何か? API Gatewayの設計思想は? API Gatewayの機能の実装方法は? API Gate
対象 sliceしか使わないのでarrayのことは知らなくてもいいと思っているGopher 内容 arrayを理解するとsliceをもっと理解できる 参考 以下のページを主に参考にしたのでちゃんと知りたい場合はこっちを読んだほうがいい The Go Blog - Go Slices: usage and internals The Go Blog - Arrays, slices (and strings): The mechanics of 'append' きっかけ サイズを指定して宣言したsliceが引数の型チェックに引っかかり悩む、というおそらくは初歩的なつまづきをしてしまった。 func main() { s := [3]int{} takeSlice(s) // Error: cannot use s(type [3]int) as type []int in argument
この記事は Go3 Advent Calendar 2017 の6日目の記事です。 はじめに DBに保存するデータのIDやセッションIDなどの一意なIDを、分散したWebアプリ上で発行することで、発行処理をスケールさせたいといったケースがあります。 そういったケースでは、UUIDやSnowflakeなどの使用例が良く紹介されています。 この記事では、Go製のライブラリで、Goアプリから簡単に使用できるID Generatorである「xid」について紹介します。 このxidは自分が仕事で開発しているシステムでも採用しています。 GitHubリポジトリ: https://github.com/rs/xid xidについて 詳しくはGitHubのREADMEの書かれていますが、その中から一部抜粋して紹介します。 binaryのformat 全体で12bytesで、先頭から以下のように構成されてい
この記事は Go (その3) Advent Calendar 2017 の5日目の記事です。 本記事では、変数の宣言に用いられる組み込み関数new()とmake()の違いについてまとめます。 まとめ さっそくですが、違いを表にまとめます。 new(T) make(T) 対象 任意の型 slice, map, channelのみ 初期化 初期化しない(ゼロ値になる) 初期化する 返り値 *T T 対象と初期化について new()とmake()で、初期化しない/するの違いは、 slice, map, channelが、内部にデータ構造を持つことからきています。 以下にruntimeパッケージで、それぞれ型が定義されている箇所を引用します。 一番理解しやすいのが、sliceです。array(実データ), len, capを初期化してあげる必要があるため、make()が用意されています。 slic
Go+Microservices at Mercari Go Conference 2017 Autumn 5 November 2017 Taichi Nakashima About me @deeeet / @tcnksm (GitHub) http://deeeet.com SRE at Mercari, Inc. Microservices platform & machine learning platform 2 Go 언어 실전 테크닉 22,000원 3 TL;DR How do we use Go (+gRPC) for microservices. 4 Microservices at Mercari Background One large PHP monolith Single repository for 3 regions (JP, US and UK) Cha
ちなみに今回のコードはそれほど実用性はありません。ここまで頑張って、シングルトンぽいことを実現する必要性は感じられないからです。サンプルコードはこちら。 https://www.github.com/Songmu/go-sandbox/ Goでシングルトンを実現する方法として以下の様なコードが良く見られます。 package singleton import "sync" type singleton struct{ } var ( instance *singleton once sync.Once ) func GetInstance() *singleton{ once.Do(func() { instance = &singleton{} }) return instance } このコードのグッドポイントとしては、 sync.Once を使っていること。以下のように素朴に nil
久しぶりに 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. まじすか。 つまり「依存関係(Vendoring)管理ツールとしては dep を推奨するけど移行できない人のために当面はサポートを続けるよ(でも将来は分からん)」という解釈でいいのだろうか。じゃあ dep に移行するしかないぢゃん。 とはいえ,いきなり本番環境に投入するのは怖いので,なにか適当なテストケースはないか,と自分のリポジトリを漁ってたら丁度いいのがありました。 sp
408e6a8 gollvm: fix handling 128-bit integers in llvm-godumpspec by amusman · 5 months ago master5dcf23d gollvm: support -fgo-importcfg command line option by Than McIntosh · 1 year ago54a9536 gollvm: cmake changes for gofrontend CL 504415 by Than McIntosh · 1 year agof059550 gollvm: encode platform info in CallingConvId by melonedo · 1 year, 10 months ago3452ec6 gollvm: update libgo cmake rules f
Go 1.9 Release Party in Tokyo での発表資料です by @__timakin__
Go の標準パッケージである net/http を使えば簡単に HTTP サーバーを立てることができる。とは言うものの、自分はそのへんが実際どうなってるのか全然わかってない。つらい。ということで、Go の勉強も兼ねて net/http の動きを少しだけ追ってみることにした。 まず、net/http を用いたよく見かけるサンプルコードを書いてみる。 package main import ( "fmt" "log" "net/http" ) func poyo(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "poyo!") } func main() { http.HandleFunc("/", poyo) if err := http.ListenAndServe(":9090", nil); err != nil { l
検証した環境は以下のとおりです。 $ go version go version go1.4.2 linux/amd64 $ whoami tkuchiki $ touch ~/testfile $ cd /tmp した状態で、 // main.go package main import ( "fmt" "path/filepath" ) func main() { abspath, _ := filepath.Abs("~/testfile") fmt.Println(abspath) } を実行してみたところ、 $ go run main.go /tmp/~/testfile と出力されました。 カレントワーキングディレクトリが ~/ の前につくようですので、 /tmp/~ を実行ユーザのホームディレクトリに置換するようにしました。 追記1: id:hnakamur3 さんからご指摘
ご承知のことと思いますが、Go言語では戻り値に名前を付ける機能を提供しています。これまで minio ではこの機能をそれほど使っていませんが、この先変わって行くでしょう。というのも、本記事で以下に説明するような魅力的な利点が含まれているからです。 私たちのような開発者であれば、下記に示すように “デフォルト”値を返すために return 文ごとに新しいオブジェクトのインスタンスを生成するという形で大量のコードを使うことがあるでしょう。 type objectInfo struct { arg1 int64 arg2 uint64 arg3 string arg4 []int } func NoNamedReturnParams(i int) (objectInfo) { if i == 1 { // Do one thing return objectInfo{} } if i == 2
以下のツイートにもある通り、一見 golang は struct を定義しないと JSON を扱えないように見えます。他にも似たようなツイートをチラホラと見かけましたが、それらは全部誤解です。そこでこの記事では、golang でゆるふわ (structを定義せず) に JSON を扱う方法を紹介します。 golang。rubyのようにゆるふわにJSONは扱えない? https://t.co/olsryDHc5G — bamchoh (@bamchoh) 2016年6月24日 この記事では入力の json.Unmarshal() を取り扱いますが、出力の json.Marshal() にも応用できます。 TL;DR json.Unmarshal() には *interface{} を渡せます interface{} は dproxy を使うと、値のアクセスで楽ができます json.Unmar
The Go Blogの日本語訳を公開しています。修正は https://github.com/ymotongpoo/goblog-ja/ まで。 Go 2にむけて Toward Go 2 by Russ Cox はじめに (この文章は本日行われた Gophercon 2017 での私の発表の書き起こしで、Goコミュニティ全体にGo 2のための議論や計画をする中での支援を求めるものです。 動画が公開されたらこちらにリンクする予定です。) Rob Pike、Robert Griesemer、そしてKen Thompsonが新しいプログラミング言語について数日議論を重ねた後、2007年9月25日にRobが「Go」という名前を提案しました。 翌年、Ian Lance Taylorと私がチームに参加し、5人で2つのコンパイラと標準ライブラリを開発し、その成果が2009年11月10日のオープンソース
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く