DRYな備忘録

Don't Repeat Yourself.

go

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…

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