DRYな備忘録

Don't Repeat Yourself.

go

【Go言語】go testに-coverをつけるとruntime.Callerが変わっちゃう問題

go

github.com % go test -v === RUN TestCaller 2015/09/14 17:57:33 375167 /Users/otiai10/proj/go/src/covsample/sample.go 9 true --- PASS: TestCaller (0.00s) PASS ok covsample 0.004s % go test -v -cover === RUN TestCaller 2015/09/14 17:57:39 37…

【Go言語】なんかjinzhu/gormのLogModeがバグってんじゃねえのかと

go

github.com 経過を待つ ついでに http://hack.aipo.com/archives/1495/hack.aipo.com DRY

おっぱいが%dつ

The Go Playground see this code in play.golang.org なんかいい響きだったので、つい

【Go言語】無名structの初期化

go

しれっと可能だったのでメモ The Go Playground package main import ( "encoding/json" "fmt" ) func main() { // 無名structの初期化 dest := &struct { Name string `json:"name"` Age int `json:"age"` Langs []string `json:"langs"` }{} json.Unmarsha…

gormでcomposite primary keyを使いたいのだが

なんかこうするっぽい type Foo struct { Bar string `gorm:"primary_key"` Baz int `gorm:"primary_key"` } で、gorm.DBのAutoMigrateかCreateTableを叩けばいいわけで、LogMode(true)で発行されてるSQLを確認すると CREATE TABLE "foos" ( "bar" varchar(2…

【Go言語】container/listのRemoveでハマった

や、ハマったってほどでもないんだけど、まあそうだよね、って感じたメモ。 以下のように書いて、barとquxをlistから排除しようとした see this code in play.golang.org barは排除できてるけど、quxは排除できてないことがわかる。 原因 Remove(e)を呼んだ…

go templateで、スライスの特定インデックスの要素の、そのまたプロパティにアクセスしたい

前回 go templateで、スライスの特定インデックスにアクセスしたい - DRYな備忘録otiai10.hatenablog.com {{index .myslice 1}} で出力できることを知ったけど、出力するだけならまだしも、それがstructでさらにプロパティがある場合どうすんねん的なことを…

go templateで、スライスの特定インデックスにアクセスしたい

あかんやつ Can I access index directly? the second is: {{.Bars[1]}} panic: template: :2: unexpected bad character U+005B '[' in command ヒィィ うごくやつ Can I access index directly? the second is: {{index .Bars 1}} The Go Playground リファレ…

Goのエラーハンドリングについてちょっとだけ思ったメモ

go

だめ1 if err := foo(); err != nil { return err } // どこがやねん、ってなる だめ2 if err := foo(); err != nil { return fmt.Errorf("failed to do foo") } // なんでやねん、ってなる すき if err := foo(); err != nil { return fmt.Errorf("failed…

#gunosygo でIntelliJ IDEAでGoを書く環境設定を教えてもらった

GOROOT, GOPATH is empty or not detected このエラーが消せなくて困っていたのだが、 IntelliJ14でGolang PluginがGOROOT, GOPATHを認識しないja.stackoverflow.com 2015/06/02開催のGunosy.goで、LTという名の他力本願で、その場で教えてもらった(ライブ…

【Go言語】[]string, []int to []interface{} とかそういうの

go

「なんかのスライス」を「interface{}のスライス」にしたい。 スライスでなければ、「なんか」を「interface{}」にするのは単に抽象度の増すキャストなので超簡単なわけだけど。 s := "hoge" i := interface{}(s) これがスライスとなるとだめ ss := []string…

【Go言語】could not determine kind of name for C.foo

問題 cgoを使ってGoのコードからC/C++のライブラリを使いたいので、手始めにHello, World書いて実行したけど、以下のエラーが出る。 % go run main.go # command-line-arguments could not determine kind of name for C.foo 可能性1) そこ、空行いれちゃだ…

Go言語の三項演算子

go

そんなものは無い。設計を見直そう。 There is no ternary form in Go. Frequently Asked Questions (FAQ) - The Go Programming Language それでも、クライアントがAPIレスポンスに、ゼロ値じゃなくてnullが欲しい、と要求してくるケースがある。この場合は…

Goのパッケージ管理ツールgodepの紹介と、僕がハマった罠

Goのプロジェクトの依存パッケージをどうするかという問題があります。 package myapp import ( "gopkg.in/hoge/fuga" "myserver.com/foo/bar" "buz" ) func main() { // ... } などのアプリケーションをサーバにデプロイするとき、fugaパッケージやbar、buz…

【Go言語】メモ:runtime.Caller

go

runtime.Caller runtime - The Go Programming Language func Caller(skip int) (pc uintptr, file string, line int, ok bool) Callerはgoroutineのスタックから呼び出された関数のファイルと行数に関する情報をレポートします. 引数skipは、スタックフレー…

【Go言語】sliceの要素をn個ずつ処理する

go

メモ source := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} fmt.Println(source) u := 2 for i := u; len(source) > 0; { if len(source) < u { i = len(source) } target := source[:i] source = source[i:] fmt.Println(target) } もっといい方法あ…

【Go言語】ループ内でのgoroutine生成の潜在的なエンバグポイントについて

go

1番、よくやるやつ(やばめ) for _, user := range users { go func() { user.SomeHeavy() }() } 非同期で生成されるクロージャの中で、参照されるuserはループ内スコープのそれなので、たとえばループのn番目とn+1番目の処理において、同じn+1番目のユーザ…

【Go言語】固定長arrayからsliceへの変換 "convert array to slice"

go

こうです arr := [4]byte{10, 20, 30, 40} slc := arr[:] fmt.Printf("%T\n%T\n", arr, slc) Go Playground 参考 Go Slices: usage and internals - The Go Blog ここにちゃんと書いてあった This is also the syntax to create a slice given an array: x :…

【Go言語】sql driverの違いによるCHARとVARCHARの挙動の違い【特にpostgresのlib/pq】

Go言語からSQLを使うときは Go言語からSQL(or SQL-like)データベースを使うときは、Go言語標準のsql - The Go Programming Languageが定めるinterfaceを実装したdriverを実際は使っています. たとえばdriverはここに列挙されてたりします. SQLDrivers - go-w…

個人的におせっかいだなと感じたGo言語の仕様

go

Go言語は、必要なものを提供し、必要じゃないものは削ぎ落とし、明示的でとても学びやすい言語だと思ってます。好きです。「なるほど、ここからは自分でやれ、ということか、面白い」「おーこんなこともしてくれちゃうのかー」という発見こそあれ、「なんで…

Go言語でmongodb使うときのmgoのメモ

Goでmongodb使うときは mgo - Rich MongoDB driver for Go まあこれ使うと思う しりたいこと embedしたstruct込みでポインタ渡すとキャストしてくれるのかという件 というのも package main import ( "fmt" mgo "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) …

データベースのコネクションプーリング(とGo言語におけるそれ)

go

コネクションプーリングとは コネクションプーリングとは 【 connection pooling 】 〔 コネクションプール 〕 - 意味/解説/説明/定義 : IT用語辞典 「コネクションを張る/切る」というコストを削減することが主な目的。1つのDBに対するコネクション総数を…

【Go言語】Go Playgroundの使い方メモ

go

Go Playgroundとは Go Playground http://play.golang.org/ どんな言語でも用意しているような、ブラウザ上でGoを書いて実行できる実行環境。 キーボードショートカットがあるっぽい (公式ドキュメント探し中) キーバインド アクション Shift + ⏎ ビルド&…

【Go言語】http.NewRequestでBodyできなくてはまった

go

問題 net/httpパッケージでRequestインスタンスを得るためにNewRequestを使う 第三引数を指定するもBodyができない なーぜー 問題のコード package main import ( "bytes" "encoding/json" "fmt" "net/http" ) func main() { data := map[string]interface{}…

【Go言語】html/templateパッケージの使い方メモ

go

メモ template.Template型のstructを扱う Newなどして得る Parseメソッドでテンプレート部分を解釈させる Executeで変数を当て込める サンプル package main import "html/template" import "fmt" import "bytes" func main() { // *template.Templateのオブ…

【Go言語】素因数分解とか約分とか

go

fmt.Println( sprime.Factorize(329).List(), sprime.Factorize(329).Dict(), ) // [7 47] // map[7:1 47:1] otiai10/sprime · GitHub 雑感 なんか車輪の再発明感がとてつもないんですけど 既存の方法とか誰かおしえてください ホリデーコーディングとしては…

【Go言語】http.Request.Formとhttp.Request.PostFormの違い

go

golangのnet/httpパッケージにあるRequestオブジェクトにはFormとPostFormというフィールドがある。この違いはなんだ? ドキュメント見る http - The Go Programming Language // Form contains the parsed form data, including both the URL // field's qu…

【Go言語】database/sqlのplaceholderで叱られる

go

問題 res, err = db.Exec( "INSERT INTO table001 (name,age) VALUES (?, ?);", "otiai10", 17, ) で、以下のように叱られる pq: syntax error at or near "," なお当方、 import "database/sql" import _ "github.com/lib/pq" の構成です 解決 ?じゃなくて$…

【Go言語】`net/http`パッケージことはじめ

go

さっきマックで女子高生が「えーまだ生net/http使ったことないのーw マジウケるんですけどー」って話してた。やばい。 最小限 とりあえず、HandleFuncやHandleを用いた最小限のサーバ package main import ( "fmt" "net/http" // "io/ioutil" ) // ResponseW…

【Go言語】可変長のioをReadしたい【bufio.Scanner】【io.Rader】

go

io.Readerを使った読み込み ファイルの読み込みやTCPコネクションのメッセージ読み込みに、io.Readerインターフェースを実装したstructのReadメソッドを使う 以下その例 package main import "fmt" import "os" func main() { file, _ := os.Open("sample.tx…