DRYな備忘録

Don't Repeat Yourself.

go

【Go言語】FileのReadちょっとメモ

go

// hoge.conf aaaaaaaa bbbbbbbb cccccccc dddddddd // main.go package main import "fmt" import "os" import "io/ioutil" import "strings" func main() { f, _ := os.Open("hoge.conf") defer f.Close() // (*os.File) Read を使う限りは、buffer sizeを…

【Go言語】packageに定義されてるstruct名を取得する

問題 メタプログラミング的なことをするうえで、ある名前のpackageの中で定義されているstruct名を抽象的に取得したいことがあったので、その方法をメモ 方法 go/ast go/parser あたりを使う 準備 % cd % mkdir $GOPATH/src/foo % vi $GOPATH/src/foo/foo.go…

【Go言語】`go build`コマンドについて和訳とメモ

go

go help build usage: go build [-o output] [build flags] [packages] Build compiles the packages named by the import paths, // `build`はimport pathsで与えられた名前のgo srcをコンパイルします along with their dependencies, but it does not ins…

Revelのコマンドを読む[第2回:run]

revel The Revel Web Framework for Go Go言語製のウェブフレームワークのひとつ 前回はrevel new hoge/fugaを読んだ 読む場所 % cd $GOPATH/src/github.com/revel/cmd revel run hoge/fuga prod めんどいからprodモード起動の場合を読む cmdのrevel/run.go …

Revelのコマンドを読む[第1回:new]

revelとは The Revel Web Framework for Go Go言語製のウェブフレームワークのひとつ 読む場所 % cd $GOPATH/src/github.com/revel/cmd revel new hoge/fuga revel/new.go var cmdNew = &Command{ UsageLine: "new [path] [skeleton]", Short: "create a ske…

HerokuでGo言語のRevelを動かしたい【heroku】【revel】【golang】

ゴール 前回のエントリでは、PaaSの代表格であるHerokuをとりあえず使ってみた 今回はHerokuでGo言語製ウェブフレームワークのひとつであるRevelを動かしたい 番外「サブドメインをかっちょよくしたい」 記録 とりあえず新しいRevelプロジェクトつくる % rev…

The simplest Twitter Streaming API by Golang

go

otiai10/twistream · GitHub 練習をかねてつくったよ The very simplest interface to use Twitter Streaming API by golang. timeline, _ := twistream.New( "https://userstream.twitter.com/1.1/user.json", CONSUMERKEY, CONSUMERSECRET, ACCESSTOKEN, A…

Go言語のcgoことはじめ【golang】【cgo】

背景 みんなだいすきGitHubで、gosseractというGo言語のOCRパッケージをニヤニヤしながらつくっていたら、知らない外人さんから 「いやos/execちゃうくてなんでcgo使わへんの?」 とか言われたのである。 cgoってナニよ? cgo - The Go Programming Language …

【invalid array bound n 】Go言語で配列長を変数で渡す

go

問題 length := len(users) var names [length]string とかしたいけど invalid array bound length と叱られる 解決 配列にはconstantしか渡せない。可変長配列にはスライスを使う Google グループ Go言語のスライスを理解しよう length := len(users) names…

Go言語でスライスの参照と参照のスライスについてメモ【golang】【slice】

go

たんなるメモです Go言語のスライス Go言語にはもちろん配列もあるけれど、スライスというのがある。めっちゃ乱暴にいうと可変長配列。むずかしいことはわかりません。参考になるのはこれです。 Go言語のスライスを理解しよう Arrays, slices (and strings):…

Go言語でジェネリクスっぽいことしたいでござるの続き【golang】【generics】

前のやつ Go言語でジェネリクスっぽいことがしたいでござる【generics】【golang】 - DRYな備忘録 の続きっていうかメモ /***** * Go言語で型変数を受けるCollectionみたいなの *****/ package main import "fmt" import "reflect" type E struct { element …

Go言語でジェネリクスっぽいことがしたいでござる【generics】【golang】

Go言語でジェネリクスみたいなことがしたいでござる。 色々調査のうえでやってみた。 stringからインスタンスを取得 完全に抽象化は無理で、具体レイヤーで必ず型アサーションをしなきゃいけない。 型アサーションの例 a := new(A) b, ok := reflect.ValueOf…

Go言語でmapのkey_exists的なやつ

go

memo Go Playground package main import "log" func main() { m := make(map[string]string) m["exists"] = "みつかったでござる" // m["not_exists"] = "みつからない" v, ok := m["exists"] println(v, ok) v, ok = m["not_exists"] println(v, ok) // よ…

【flagg】そんなもんは作らんでよかったのである【Go言語】

go

前略 昨日これを書きました 【つくった】Go言語のflagパッケージでコマンドラインオプションが取得できない気がしたので - DRYな備忘録 これに対して、id:hayajo_prpr 氏から以下のようなご指摘を頂きました。 flagパッケージを使う場合はこんな感じでいかが…

【つくった】Go言語のflagパッケージでコマンドラインオプションが取得できない気がしたので

go

追記 【flagg】そんなもんは作らんでよかったのである【Go言語】 - DRYな備忘録 以下原文 Go言語ではcliのbinが簡単に作れる % cd $GOPATH/src % mkdir mytest % vi mytest/main.go main.go package main import "fmt" func main() { fmt.Println("イエーイ☆-(ノ…

Go言語`database/sql`パッケージのplaceholderが効かない【小学生は最高だぜ】

問題 Go言語でMySQLを使う案件があったので、Goに標準のdatabase/sqlパッケージを使う(あとgithub.com/go-sql-driver/mysqlパッケージも)。問題はdatabase/sqlパッケージの*sql.DBが持ってるQueryメソッドがデフォルトで実装しているplaceholder機能を以下…

Go言語でinterfaceをimpleしてるつもりが「does not implement (method has pointer receiver)」って叱られる【golang】【pointer】【ダックタイピング】

問題 Go言語はinterfaceによる型の制約ができる。逆にinterfaceで宣言したメソッドをすべて満たすいかなるstructもそのinterfaceを満たすものとして扱える。いわゆるダックタイピング。 参考 ダックタイピングって一体なんなのよ【golang】 - DRYな備忘録 で…

Go言語でプリミティブ型に拡張メソッドを生やす【golang】【type】【extend】

go

問題 Go言語で、たとえばstring型を拡張してみたい 一応 package main type MyStr string func (s MyStr) Waros(i int) MyStr { for j := 0; j < i; j++ { s += "w" } return s } func main() { var s MyStr = "なんつってつっちゃった" println( s.Waros(20…

Go言語のラムダ式のmapの中での型名【golang】【lambda】【type】

go

問題 Go言語のmapでは、キーとバリューにそれぞれ型が指定できる。 var myMap = map[int]string{ 60: "還暦", 70: "古希", 77: "喜寿", } 当然、定義したtypeやその参照でも指定できる。 type User struct { Name string Lang string } var myMap = map[stri…

Go言語で、クラス名からインスタンスを動的コンストラクトする、みたいなの【golang】【reflect】

go

問題 なんか文字列渡ってきてそれに対応するクラスをインスタンス化するみたいなのやったりする。 たとえば PHP prop}"; } } $class_name = "MyKlass"; $k = new $class_name(); $k->meth(); Python class MyKlass: def __init__(self): self.p…

travis-ciでRedisを使うプロジェクトをCIしたい【Travis CI】【Redis】

問題 Redisを使ったプロジェクトのCIをTravisに任せたいんだけど、TravisがホストしてるサーバってRedis入ってるの?ポートは? 解決 入ってます Travis CI: Databases and other services Redisだけじゃなくてもちろん他のDBも入ってる。ウェブGUIからの操…

Go言語からredisの基本的なコマンドを叩いてみる【golang】【redis】

ゴール MacにRedisをインストールしてことはじめ【redis】【MacOS】 - DRYな備忘録 これをやったので Goのコードから同じことをしてみます 方針 tcpでredisサーバに接続して、redisのプロトコルでメッセージのやりとりをします。 Redis Protocol specificati…

Go言語のchannelについてわかったことをメモるよ【golang】

go

問題 以前 Go言語のchannelって一体何よ ~基礎編~【golang】 - DRYな備忘録 のエントリを書いて分かった気になってたgolangのchanですが、このたびそらで書いてみて動いたのでこれはちょっと理解できたと思っていいだろうということでメモるよ。 並行処理と…

Go言語のfieldがメソッドによって更新されないっぽい?

go

問題 Golangのstructに生えてるメソッドによって、structのfieldを更新しようとしたけど、変わってないっぽい? package main import "fmt" type Ship struct { name string } func (s Ship) ChangeName() string { s.name = s.name + "改" return s.name } …

Go言語におけるinterfaceのimplementsチェック【golang】

go

問題 Go言語ではinterfaceで実装すべきメソッドの制約がつけれる 定義したstructが定義したinterfaceの実装を満たしているかチェックしたい 解決 Go言語では "Type Assertion" という仕組みがある package main import "fmt" // import "reflect" type Foo i…

Go言語のハードタブがつらいマンのgit pre-commitフック

メモ cat .git/hooks/pre-commit #!/bin/sh go fmt ./... なお、Golangの文化はハードタブです— マコピー (@mackee_w) 2014, 2月 15

Go言語のgoroutineって一体何よ【golang】

go

goroutineって一体何よ さっぱり分からないよ。並行処理?んご。Pythonならthreadingをちょっとだけ使ったことある。 しらべてみよう これめっちゃ分かりよかったです Go の並行処理 - Block Rockin’ Codes やってみよう 確かめたいポイントとしては gorouti…

Go言語に継承は無いんですか【golang】

go

困った 継承が無いのは困った。共通メソッドとかどうすりゃええねん的な。 前回のダックタイピングって一体なんなのよ【golang】 - DRYな備忘録に引き続き、めっちゃ参考にしたのはこれ Go言語における埋め込みによるインタフェースの部分実装パターン - Qii…

ダックタイピングって一体なんなのよ【golang】

go

ダックタイピングって ダック・タイピング - Wikipedia 一体何さ。わからないよ 調べた golangにおけるダックタイピングとは、で一番分かりやすかったのこれ Go言語における埋め込みによるインタフェースの部分実装パターン - Qiita 2014/05/27 追記 つまり…

GolangでOAuthしてTwitterのscreen_nameがjson decodeで取れないでござる【Twitter OAuth】【golang】

go

問題 golangのoauthモジュールとか使って楽々TwitterAPI生活したいじゃないですがgolangで。でOAuthは簡単に実装できたんだけど、ログインユーザのscreen_name取ろうとして取れない。 結論から言うとencoding/jsonの使い方だった 3時間くらい詰まったがな...…

(訳しながら)つくって覚えるRevelフレームワーク - その3

go

第3回 きっと何者にもなれない僕は、Go言語のウェブフレームワークであるRevelのドキュメントを和訳しつつ、理解を深めたいでござる。 前回 : (訳しながら)つくって覚えるRevelフレームワーク - その2 - DRYな備忘録 今回は Introduction のチュートリアル…

(訳しながら)つくって覚えるRevelフレームワーク - その2

go

前回にひきつづき、Golangどころかフレームワークのなんたるかを理解していない僕はRevelのドキュメントを和訳しつつ、理解を深めたいでござる。 それでは 今回はOverviewからでござる。 Overview This section gives you a taste of various parts of the f…

(訳しながら)つくって覚えるRevelフレームワーク - その1

go

Revelとは The Revel Web Framework for Go Golangのウェブフレームワークです。Router,Controllerを提供していて、他にも最低限のアプリケーションテストが最初から準備されている感じのもの。 すでに いくつかの自分のサービスはRevelで運用している otiai…

revel not found

go

revelインストールしたい % go get github.com/robfig/revel % which revel revel not found ふぁっ? こうだった % go get github.com/robfig/revel/revel % which revel /Users/otiai10/proj/go/bin/revel

Revelでjsonを返すときフィールド名を小文字にしたい【Revel】【golang】

go

これです Lower case key names with JSON Marshal in Go - Stack Overflow

golangを触ると家に帰りたくなる。つまりGo Home

go

Goを触ると家に帰りたくなる 仕事しているとやむなく(?)Goを触らなければならないことがある。これ不可抗力。 package main import "fmt ( ゚д゚)ハッ! 家に帰りたい!! つまりGo Home ということでつくりました otiai10/gohome https://github.com/otiai10/goh…

Go言語で可変長引数

go

package main import "fmt" func hoge(args ...string) string { fmt.Printf("%+v",args) return "hoge!!" } func main() { fmt.Println(hoge()) fmt.Println(hoge("fuga")) fmt.Println(hoge("foo","bar")) // fmt.Println(hoge([]string{"unko","oppai"}))…

Revelでプロジェクトをnewしてみた【Revel】【Golang】

go

問題 GoのウェブフレームワークRevelをこのサイトで使っています。 これで、 http://otiai10.hatenablog.com/entry/2013/09/29/131902 Revelのプロジェクトゼロから書いたけど、ゼロからやらなくていいっぽい。 revel new hogehogeってコマンドがあるらしい…

Go言語でデフォルト引数を使う【golang】

go

問題 go言語でデフォルト引数を使いたいじゃないか。 調査 http://stackoverflow.com/questions/2032149/optional-parameters Go does not have optional parameters 用意してないっぽい。だけど、その下にある type Params struct { a, b, c int } func doI…

Go言語でMonth型をintにする【golang】

go

問題 go言語で現在時刻は以下のように取得できる package main import ( "time" "fmt" ) func main() { now := time.Now() fmt.Printf("Now\t: %v\n", now) fmt.Printf("Year\t: %v\n", now.Year()) fmt.Printf("Month\t: %v\n", now.Month()) fmt.Printf("D…

revelでfileをアップロードするもnil【revel】【Go】【html】

go

問題 Goのウェブフレームワークrevelでファイルをアップロードしたい。 のに、nilがアップロードされてくる。 ナンデヤ app/views/Test/Index.html <html> <head> <meta charset="utf-8"> </head> <body> <h1>テストデータのアップロードページ</h1> <form name="upload" method="POST" action="/test/upload"> <input type="file" name="imgFile" accept="image/png"> </form></body></html>

GoのウェブフレームワークrevelでHelloWorld【revel】【Golang】

go

goal goをインストール revelをインストール revelで簡単なウェブサーバつくる revel 【動詞】 〔…を〕大いに楽しむ,〔…に〕ふける,凝る 〔in〕. log goをインストール mercurialが必要っぽい sudo apt-get install mercurial さきにPATH通しとく # {{{ GO…

ローカルMacにGOをインストールしてHelloWorld【Go言語】【brew】【MacOSX】

go

Goal ローカルのMacに.goファイルをつくって実行 ハローりっちゃん FizzBuzz 外部ファイルにローカルパッケージつくってimportする Log インストールしてみる [13:05:31] % brew search go algol68g go-app-engine-32 gocr google-sparsehash jpegoptim pygo…