Plan 9とGo言語のブログ

主にPlan 9やGo言語の日々気づいたことを書きます。

Go

GoでFUSEを使ってGitHubのIssuesをマウントする

この記事はQiitaで公開されていました この記事は、Goアドベントカレンダー(その2)の19日目です。 何を言っているのか分からないかもしれませんので、動画を用意しました。 アドベントカレンダーはこれを作った話です。本当はPlan 9対応までやりたかった。 p…

Sierraでgo1.7.3のコンパイル

この記事はQiitaで公開されていました macOS SierraでソースからGoをコンパイルできなくて調べた内容です。macOSなら公式からバイナリパッケージが提供されているので、自分でコンパイルしなくてもそれを使えばいいだけなのですが、他の環境でも使える内容だ…

golang.org/x/time/rateで速度制限を行う

この記事はQiitaで公開されていました 例えば、APIの結果を使った処理を行う場合、ユーザとしてはなるべく早く処理をしたいけど、早すぎるとサーバの処理が追いつかないケースはよくあると思います。 そういう時、APIを実行した後でtime.After等を使って少し…

パッケージのimport pathを好みのURLにする

この記事はQiitaで公開されていました Goのパッケージ名は、リポジトリのURLをそのまま使うことが多いと思いますが、リポジトリはそのままで、別のURLをパッケージ名にすることもできます。 例えば、あるパッケージのリポジトリをGitHubに置いていて、リポジ…

atomicパッケージが必要な理由と使い方

この記事はQiitaで公開されていました 以下のコードは通常分かりづらいバグを持っています。 package main import ( "fmt" "runtime" "sync" ) type Counter int32 func (c *Counter) Inc() { *c++ } func main() { var c Counter var wg sync.WaitGroup for…

ゴルーチンで発生したエラーの返し方

この記事はQiitaで公開されていました ゴルーチンで並行実行中させた処理の中で、エラーが発生した場合にどう扱うかは割と面倒です。 package main import ( "io/ioutil" "log" "net/http" "os" ) func main() { c := make(chan []byte) go func() { res, er…

GoとAlefとLimbo

この記事はQiitaで公開されていました GoとLimboは、一部のファンから、似ていると言われますので、そんなに似ているのか、実際に比較してみました。ついでに、この2つの言語は共通してAlefが先祖になりますので、Alefも含めます。 いちおうこの記事は、Go A…

Go on Plan 9ではまったこと

この記事はTumblrで公開されていました Go 1.3.1をビルド Plan 9(386)にGo 1.3.1をインストールしてみた。通常どおりsrc/all.rcを実行したのだけれど、cmd/8cと出力された後にinvalid opcodeエラーで落ちる。そのため、インストールできない。 Go 1.3.0をビ…

管理者権限が無くてもMacにGoをインストールする

この記事はQiitaで公開されていました brew本体をインストールするのもGo公式パッケージを入れるのも管理者権限を要求されますが、権限が無くてもGoはソースからインストール可能ですしなるべく環境を汚さないようにしたい場合にも有用だと思います。 ただし…

Goワークスペース

この記事はTumblrで公開されていました(Go 1.2の頃に書いたものです) Go言語には、ワークスペースという構造があります。最初はとても取っ付きづらいのですが難しいものではないので、軽く書き流します。 ルール GOROOT環境変数 GOROOT環境変数は、Go言語本…

Goのはじめかた

この記事はTumblrで公開されていました。とても古い記事なので参考にならないかも。 こないだ業務でGoを使ったプログラムを書きました。もともと個人的に使っていましたが、いいきっかけなのでまとめておきます。 インストール ここではソースからインストー…