DRYな備忘録

Don't Repeat Yourself.

go

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…

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