DRYな備忘録

Don't Repeat Yourself.

go

【Go言語】循環参照"import cycle"についてメモ

go

例 $GOPATH/src/foo/foo.go package foo import "bar" func Foo() { println("foo.Foo") } func CallBar() { bar.Bar() } $GOPATH/src/bar/bar.go package bar import "foo" func Bar() { println("bar.Bar") } func CallFoo() { foo.Foo() } buildしてみる …

【Go言語】Appleプッシュ通知を使う【APN】

ゴール 先日【iOS】Push通知の実装(サーバ編その1)【できた】 - DRYな備忘録においてRubyで実装した 今回はこれをGo言語でやる 記録 こういうのがある anachronistic/apns · GitHub 上記ブログで使用したRuby製のhoustonとの違いは クライアントを初期化す…

【Go言語】assignment to entry in nil map

go

問題 以下のエラーが出た panic: runtime error: assignment to entry in nil map 調査 Go言語では、ほとんどの型は宣言時に初期化される。 package main import "fmt" type A struct { Foo []float64 Bar bool } func main() { var i int fmt.Printf("%+v\n…

【Go言語】別packageのstructを埋め込んだら何でアクセスすればいいんです?

go

メモ $GOPATH/src/foo/foo.go package foo type Foo struct{ Bar string } main.go package main import "fmt" import "foo" type Buz struct { foo.Foo } func main() { bar := Buz{} fmt.Printf("%+v\n", bar) bar.Foo = foo.Foo{Bar:"otiai10"} fmt.Print…

【Go言語】testの中でPrintlnしてるのに標準出力に出ない

go

% go test ok command-line-arguments 120.786s いやokじゃねえよ。出せよ。 解決 -vつけましょう % go test -v === RUN TestNew hoge is hoge DRYな備忘録

【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…