タグ

golangに関するf99aqのブックマーク (18)

  • throttled package - github.com/throttled/throttled - Go Packages

  • The Go Blog - Using Go Modules / Go Modulesを使う(和訳) - Qiita

    この記事は The Go Blog - Using Go Modules の和訳です。 はじめに Go 1.11および1.12には、依存バージョン情報を明示的で管理しやすくする、Goの 新しい依存管理システム である モジュール の予備サポートが含まれています。このブログ記事は、モジュールを使い始めるために必要な基的な操作を紹介するチュートリアルです。この次の記事では、他の人が使用するためのモジュールのリリース方法について説明します。 モジュールは、そのルートに go.mod ファイルを持つファイルツリーに格納された Goパッケージ の集まりです。 go.mod ファイルは、モジュールのモジュールパス(ルートディレクトリに使用されるインポートパス)とその依存関係の要件(ビルドを成功させるために必要な他のモジュール)も定義します。各依存関係の要件は、モジュールパスと特定の セマンティックバ

    The Go Blog - Using Go Modules / Go Modulesを使う(和訳) - Qiita
  • Big Sky :: gocode やめます(そして Language Server へ)

    はじめに まず始めに言っておかなければなりません。 gocode 今まで当にありがとう この記事は、Go 言語歴10年になる僕がこれまで愛用してきた Go 言語のコード補完ソフトウェア gocode の歴史と功績、そして今、gocode 自らがその役割を終えようとしている姿をぜひ皆さんに知って頂きたいという思いから Go Advent Calendar 2018 の記事として起こしました。この記事では gocode が歩んできた歴史と苦悩を少しでも皆さんに分かる様に解説させて頂きつつ、そして次にやってくる Go 言語のコード補完の未来についてご紹介したいと思います。Vim について多めに書かれていますが、Visual Studio Code での Go 開発にも影響する話です。 gocode とは gocode は nsf 氏が開発した Go 言語のコード補完サーバです。 GitHub

    Big Sky :: gocode やめます(そして Language Server へ)
  • モジュール対応モードへの移行を検討する — プログラミング言語 Go | text.Baldanders.info

    Go 言語コンパイラのバージョン 1.11から搭載された「モジュール対応モード」だが,少し試してみてそれなりに使えそうなので,この記事である程度まとめておくことにした。 これからも何かあればこの記事に加筆・修正していく予定である。 なお,モジュール対応モードは 1.11 時点で preliminary support に過ぎないため,以降のバージョンで大きな変更が行われるかもしれない。 したがってこの記事はバージョン 1.12 以降で大幅に書き替える可能性がる。 用語の整理 まず最初に用語の定義をしておく。 GOPATH モードとモジュール対応モード バージョン 1.11 以降からは Go 言語コンパイラは以下の2つのモードのどちらかで動作する1。 GOPATH モード (GOPATH mode) : バージョン 1.10 までの動作モード。標準ライブラリを除く全てのパッケージの管理とビル

    モジュール対応モードへの移行を検討する — プログラミング言語 Go | text.Baldanders.info
    f99aq
    f99aq 2018/11/04
  • ISUCON 8 予選の Go 初期実装に見る初心者コード - methaneのブログ

    会社のBlogにも書いたのですが、ISUCON 8 予選で負けてきました。 さて、 ISUCON の初期実装の定番として、初心者が書いたようなSQLやコードになっている点が挙げられます。 今回の Go の初期実装もその定番にもれず、初心者がやりがちな、Goの良さを殺してしまうコードがありました。 今回負けた反省点の一つとして、アプリの書き換えを二人でやっていたのでコンフリクトを恐れてそのリファクタリングを怠ったというのもあります。 Go戦に参加されるチームの方にはぜひこれを克服してもらいたいと思います。 アンチパターン: 長い無名関数 例: https://github.com/isucon/isucon8-qualify/blob/9d7890f5433bdaf2cec75b4cdf1ebd0d9a531281/webapp/go/src/torb/app.go#L404-L492

    ISUCON 8 予選の Go 初期実装に見る初心者コード - methaneのブログ
    f99aq
    f99aq 2018/10/13
  • Go 1.11 のリリースと「モジュール」機能の実験的サポート — リリース情報 | text.Baldanders.info

    1ヶ月も前の話で申し訳ないが,先月末に Go 言語コンパイラ 1.11 がリリースされた。 Go 1.11 is released - The Go Blog Go 1.11 Release Notes - The Go Programming Language 主な変更点は以下の2つ。 WebAssembly へのコンパイルをサポート 「モジュール」機能の実験的サポート このうち,今回は「モジュール」機能のサポートについて簡単に紹介する。 「モジュール」とは,これまで vgo (Versioned Go) として開発が進められてきたもので vgo (Versioned Go) に関する覚え書き この成果が正式に組み込まれる。 バージョン 1.11 で「モジュール」機能を有効にするには環境変数 GO111MODULE を on または auto にセットする。 ちなみに,環境変数 GO11

    Go 1.11 のリリースと「モジュール」機能の実験的サポート — リリース情報 | text.Baldanders.info
  • Goの日付フォーマット 〜<2006年1月2日>の謎〜 - Hack Your Design!

    今日の日付の取得 2006年1月2日の謎 Goの内部実装を覗いてみる Goの標準日付フォーマット Goの現在時刻は time.Now() で取得することができるが、フォーマットされた現在日時はどのように取得すればよいのだろうか? 今日の日付の取得 package main import ( "fmt" "time" ) func main() { // フォーマットなし現在時刻 fmt.Println(time.Now()) // フォーマットあり現在時刻 fmt.Println(time.Now().Format("2006年01月02日")) } 2006年1月2日の謎 しかしここで1つの疑問が残る。Format()の引数として与えられる 2006年01月02日 はどうして2006年1月2日なのだろうか? 2001年2月3日でもダメだし1234年5月6日でもダメだ。きっちり 2006年

    Goの日付フォーマット 〜<2006年1月2日>の謎〜 - Hack Your Design!
    f99aq
    f99aq 2018/08/23
  • A Tour of Go

    A Tour of Go

    f99aq
    f99aq 2018/06/24
  • 正規表現に関する戯れ言

    以下の記事を見て思いついたことを戯れ言として書いておく。 コード少な目でゴメンペコン(どっちのセクションで書こうか悩んだ)。 Golangの正規表現がどれぐらいおそいのかをPythonと比較してみた話 - Qiita 詳しい解説はブックマークにある記事を参照のこと。 正規表現 regexp パッケージは(概ね)遅い そもそも正規表現(regular expression)は,それ自体が言語の一種と言える1。 スクリプト言語のように言語仕様の一部として組み込まれている場合は別だが, Go 言語のようなコンパイル言語の場合,普通は(言語体ではなく)ライブラリやフレームワークの一部として組み込まれる。 Go 言語標準の正規表現エンジンである regexp パッケージは(PerlRuby といった言語に比べて)概ね遅い。 これは当である。 regexp パッケージの設計方針について以下の

    正規表現に関する戯れ言
  • vgo (Versioned Go) に関する覚え書き

    Go 言語の次のバージョン(v1.11)から vgo (Versioned Go) を実装する計画があるようで, vgo 関連のドキュメントが公開されている。 research!rsc: Go & Versioning research!rsc: Go += Package Versioning (Go & Versioning, Part 1) research!rsc: A Tour of Versioned Go (vgo) (Go & Versioning, Part 2) research!rsc: Semantic Import Versioning (Go & Versioning, Part 3) research!rsc: Minimal Version Selection (Go & Versioning, Part 4) research!rsc: Reproduci

    vgo (Versioned Go) に関する覚え書き
    f99aq
    f99aq 2018/03/19
  • Go言語のリアルタイムGC 理論と実践 | POSTD

    (編注:誤訳、意味の分かりづらい訳を修正しました。リクエストありがとうございました。) 毎日、Pusherは数十億のメッセージをリアルタイム、つまり送り元から宛先まで100ms未満で送信しています。どのようにしてそれを可能にしているのでしょうか。重要となる要因はGoの低レイテンシのガベージコレクタです。 ガベージコレクタはプログラムを一時停止させるものであり、リアルタイムシステムの悩みの種です。そのため、新しいメッセージバスを設計する際には慎重に言語を選びました。Goは 低レイテンシを強調している ものの、私たちは懐疑的でした。「当にGoを使えば実現できるのか? もしできるならどうやって?」 このブログ記事ではGoのガベージコレクタを、どのように機能し(トリコロールアルゴリズム)、なぜ機能し(こんなに短いGCによる一時停止時間の実現)、そして何よりも、それが機能するのかどうか(GCによる

    Go言語のリアルタイムGC 理論と実践 | POSTD
  • Goroutineハンターが過労死する前に - Qiita

    Goroutineハンター、それは逃げ出したgoroutine達を捕まえるため、日夜戦い続けるエンジニア達のことである。Goroutineハンターは番環境でOOM Killerが発動するたびに呼び出され、逃げ出したすべてのgoroutineを捕まえるまで家にかえることが出来ない。しかし、あなたが書いた何気ないコードによって、今日もまた新しいgorutine達が野に放たれるのであった。 Goroutineリークとの戦い Goを使用してある程度規模のプログラムを書くと、必ず問題になるのがgoroutineのリークである。goで生まれたgoroutineが、何らかの理由で正常に終了しない場合、それは「リーク」していると見なされる。リークしたgoroutineはプロセスが続く限り永遠にリソースを手放さないため、リークしたgoroutineが蓄積するに従って、プログラムのパフォーマンスは低下してい

    Goroutineハンターが過労死する前に - Qiita
  • 配列と Slice

    以下の記事を見て思わず膝を打った。 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]) } }

    配列と Slice
  • Go1.7からSSAが導入された - flyhigh

    初めに Go 1.7がリリースされる。目玉の一つは、SSA-IRが導入されたことだろう。Go1.7でSSAが入るんだけど、SSAって何?と居酒屋で聞かれたことが稿の発端だった。私の知識だけでは包括的な説明にならなかったので、いろいろ調べつつそれをまとめた。 以下、一般的な話ではなく、なるべくGoに絞って話を進めている(コンパイラのコードはは cmd/compile/internal/gc あたりにある)。より一般的な話は、参考文献等を示したのでそちらを参考にしてほしい。いろいろ調べて、Goに追加されたSSAについて知るべきことは、SSAが何か?よりも、SSA導入したGoがどうなったか、であると思った。 SSAとは何か SSA とは Static Single Assignmentの略だ。一つの変数への代入は一度しか行われてない事が確約できる形式のコードだ。この形式のコードは、最適化が行い

    Go1.7からSSAが導入された - flyhigh
  • golang は ゆるふわに JSON を扱えまぁす! — KaoriYa

    以下のツイートにもある通り、一見 golang は struct を定義しないと JSON を扱えないように見えます。他にも似たようなツイートをチラホラと見かけましたが、それらは全部誤解です。そこでこの記事では、golang でゆるふわ (structを定義せず) に JSON を扱う方法を紹介します。 golangrubyのようにゆるふわにJSONは扱えない? https://t.co/olsryDHc5G — bamchoh (@bamchoh) 2016年6月24日 この記事では入力の json.Unmarshal() を取り扱いますが、出力の json.Marshal() にも応用できます。 TL;DR json.Unmarshal() には *interface{} を渡せます interface{} は dproxy を使うと、値のアクセスで楽ができます json.Unmar

  • Big Sky :: ちっちゃなビルドシステム qo が激しく便利だった件

    « Re: VimでURLをドメインだけに置換するコマンドを正規表現でうったら、当に正規表現って意味不明なフォルムと思った。 | Main | golang のリファクタリングには gofmt ではなく、gorename を使おう。 » golang には go build というビルド機能があり、C言語と golang をまぜた cgo というC言語拡張も同じコマンドでビルド出来ます。 その際、ソースコードのコメントに CFLAGS や LDFLAGS を自ら指定する事が出来るので package gtk // #include "gtk.go.h" // #cgo pkg-config: gtk+-2.0 import "C" import ( "fmt" "log" "reflect" "runtime" "strings" "unsafe" "github.com/mattn/g

    Big Sky :: ちっちゃなビルドシステム qo が激しく便利だった件
  • ピクシブ新広告サーバー構築物語

    ピクシブ2014夏インターン講義資料 構成だけでなく失敗談なども書いてあります

    ピクシブ新広告サーバー構築物語
  • ターミナル操作の記録(ttyrec)からGIFアニメを生成するツールを作った - すぎゃーんメモ

    ttyrec で録画したデータを使ってターミナル上で再生しつつ、そのスクリーンキャプチャを使ってアニメーションGIFを生成するツールをGoで作ってみた。 https://github.com/sugyan/ttygif Releases Mac, Linux Desktopで動作。再生速度はオプションで変更可能。 背景 percolを使ってターミナル操作を早く、便利に。 - すぎゃーんメモ のような記事を書いたりする際に、ターミナル操作を録画してGIFアニメにしたい需要があり。 そういった用途に使える汎用のデスクトップ録画ツールとしてはLICEcapやGifzoなどがある。 Cockos Incorporated | LICEcap http://gifzo.net/ これらはWindows, OSXあたりが対象で、Linuxの場合はまた他のツールがあるらしい(よく知らない)。 汎用的なキ

    ターミナル操作の記録(ttyrec)からGIFアニメを生成するツールを作った - すぎゃーんメモ
  • 1