golang
golangのmapはPythonのdictよりRubyのHashに近くて、無効なキーでアクセスしてもpanicしたりせず、各型の初期値を返すようです。map[string] stringならば、""を返すし、map[string] intなら0です。map[string] *Typeならnil。最後のケースを、次のコードで…
golangでiotaを使うと、0から順に数字を入れてくれます。iotaのカウントはグループ単位なので、')'を抜けたあとは再び0にリセットされます。加えて、"cont ( identifier Type = iota.."とすると、typeが付くようです。それを以下のコードで確認してみました…
"link"という名前のショートカットを作って package main import ( "fmt" "os" ) func main() { name, err := os.Readlink("link.lnk") if err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) os.Exit(1) } fmt.Printf("%q\n",name) } をビルド実行したら、 …
与えられたパスがファイルなのか、ディレクトリなのか、リンクなのかを調べるには、os.Stat(path string)でまずFileInfoを得ます。それから、FileInfo.Modeにos.Symlinkのフラグが立っていればリンク、ディレクトリの場合はIsDirで調べられます。リンクから…
エラー処理のテストを書いているのですが、期待されるエラーメッセージをテストデータの中に埋め込むとテストコードを変更することなしにどんどんテストケースを追加することができます。 たとえば、 [[ページ1が開きます。 `` ERROR "1:2: expecting \"]]\"…
golang.jpにある並行処理の例、素数の篩(ふるい)をボトムアップに作ってみます。まず、 package main import "fmt" func main() { ch := make(chan int) go func() { for i := 0; ; i++ { ch <- i } }() result := "" for i := 0; i < 10; i++ { result += f…
0から順番に整数を生成する無名関数それを受け取ってresultに追加する処理が並行して処理されてるってことだと思います。go (処理)で処理がバックグラウンドで行われ、その処理結果がch(チャンネル)を通して得られるっと。 package main import "fmt" func m…
*コメントにあるように、メソッドチェーンは使えますが、以下のような現象が起こるのは事実ですしばらく書いてようやく気づきました。仕様はどうか知りませんが、実装としてGo言語はメソッドチェーンは使えないようです。 package main import "fmt" type A …
Go言語でどう書けば良いか調べてみました。ReadDir(dirname string) ([]os.FileInfo, error)でファイル情報の一覧が得られるようです。 package main import ( "io/ioutil" "os" "fmt" "strings" ) func main() { list, err := ioutil.ReadDir(os.Args[0]) i…
最近、Wikiを書くのですが、webアプリだとブラウザが落ちるかもしれないし、なんか色々と不安定なのでローカルアプリでWikiからhtmlに変換するなり、エラーチェックするなりするツールが欲しいと思いました。たぶん、探したらあるのかもしれませんが(ほらこ…
Go 1でも使えるようにしたopts-goは次のようにしてソースコードを得ることができます。 git clone git@github.com:nnabeyang/opts-go.git github:nnabeyang/opts-go
catの-nオプションだけ書いてみました。行数を表示させるのにreadlineが欲しかったのですが、bufioのReaderがReadLineを持っていました。 package mainimport ( "bufio" "fmt" "io" flag "opts-go" "os" )var flagNumber = flag.Flag("n", "--number", "Numb…
前回echoを書いてみたのですが、flagパッケージでは"-en"みたいな指定ができませんでした。それで、opts-goというものを代わりに使ってみました。"POSIX- and GNU-style options for go"って書いてあります。"-en"くらい扱ってくれそうですね。ところが、ダ…
echoってshellのあれです。echoにもオプションがあって、"man echo"で 説明 echo は与えられた string をそれぞれ標準出力に書き出す。それぞれの間にはスペースを挟み、 最後の引数の後には改行を行う 。ただし -n オプションが指定されている場合は改行し…
goを久しぶりに更新しました。そしたら8g, 8lとかが無くなって少し焦りました。なんとなくgoとタイプしてみたら、goコマンドに統一されたようだということが分かりました。いつごろからgoになったんでしょうね。サブコマンドの補完機能が標準でついてなかっ…
パッケージの作る方法は「Goコードの書き方」にあります。これに従って、Makefileを作ります。my_sort.goにmysortパッケージを作るとすると、Makefileは include $(GOROOT)/src/Make.incTARG=mysort GOFILES=\ my_sort.go\include $(GOROOT)/src/Make.pkg と…
golangは、Cとも違うし、C++, Javaなどとも少し毛色が違った言語のような気がするので、触りはじめました。とは言っても、オブジェクト指向プログラミングもできるようなので、とっつきやすいとも思います。パッケージsortの中身を見ると、insertionSort, qu…