DRYな備忘録

Don't Repeat Yourself.

go

【Go言語】意地でもsliceをswitch-caseで比較したい

invalid case []byte literal in switch (can only compare slice foo to nil) switch response[:4] { case []byte{0,0,0,0}, []byte{1,0,0,0}, []byte{2,0,0,0}: fmt.Println("do something") } // これ動かないやつ 可変長であるsliceはnilとの比較だけが…

(メモ)Go言語のinvalid recursive typeエラー、再帰データ型の実装とイテレーションについて

go

jsonでいうとこんな感じの { "id": 48, "name": "foo", "entry": { "id": 36, "name": "bar", "entry": { "id": 24, "name": "baz", "entry": { "id": 12, "name": "qux" } } } } 問題 コンパイル時のinvalid recursive typeエラーは、ポインタ型にすれば解…

Goのコードから複数の異なるDockerホストに対してコンテナの起動を実装する

2017/06/19 追記 エラーハンドリングにバグがあったので修正しました channelに何か流したとき、channelから取り出されないと流し込んだ側をブロックするのを忘れていました - errored <- err + go func() { + errored <- err + }() 前回までで以下のことを…

【GAE/Go】goappで "There are too many files in your application" と怒られる

追記 gcloud components updateするとgoogle-cloud-sdk以下のファイルが更新されて魔改造が吹っ飛ぶ。かなしみ。 問題 % goapp serve INFO 2017-06-07 01:58:24,616 devappserver2.py:692] Skipping SDK update check. INFO 2017-06-07 01:58:24,646 api_ser…

RedHatにGo言語をインストール(というか配置)

$ cd $ mkdir -p opt/src $ cd opt/src $ wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz $ tar zxvf go1.8.1.linux-amd64.tar.gz $ mv go ~/opt/.go # GOROOT用 $ mkdir -p ~/proj/go # GOPATH用 $ export GOROOT=~/opt/.go $ exp…

個人開発程度のOCRサーバならHerokuに立てればいいじゃない

このエントリはGo (その2) Advent Calendar 2016 - Qiitaの5日目です。WETな方でもお世話になっております、otiai10です。 とある個人開発が、もうかれこれ3年ぐらい続いているんですが、ブラウザ上に描画されたちょっとしたテキストをOCR(文字認識)する要…

herokuで自作buildpackを作った時に得た知見

かつてこれ↓を書いたときからまたHerokuは状況が変わってて、 otiai10.hatenablog.com 今では、buildpackっていう、いうなればインスタンスの初期化スクリプトみたいなのを定義できるっぽい。そこで依存するパッケージのインストール(に相当すること)も可…

How to install gosseract to CentOS 7

What is this document for? "gosseract" is a Tesseract-OCR wrapper for Golang, and this document is for an issue reported to "gosseract" github.com Reproduce the issue Set up environment for simulating CentOS # because I'm using MacOS % doc…

【Go言語】GoでJWT(JSON Web Token)を使うサンプル

参考 JSON Web Tokens - jwt.io GitHub - dgrijalva/jwt-go: Golang implementation of JSON Web Tokens (JWT) jwt - GoDoc GitHub - slok/go-jwt-example: Golang & jwt (Jason web token) example ← なんかこれ今時点で動かなかったので package main impo…

【Go言語】ローカルのGoの(継続的な)バージョンアップ【go1.7】

go

なんかいつの間にこんなrepoあったの go - Git at Google git clone https://go.googlesource.com/go とりあえず現状確認 % go version go version go1.6.2 darwin/amd64 % echo $GOROOT /Users/otiai10/.go/1.6.2 % ls /Users/otiai10/.go 1.4.3 1.5.3 1.6.2…

Go言語でBasic認証する

go

参考 http - The Go Programming Language javascript - How to prevent browser to invoke basic auth popup and handle 401 error using Jquery? - Stack Overflow 実装 main.go package main import ( "fmt" "net/http" "github.com/otiai10/marmoset" ) …

【追記】AppEngine Goで、go-app-builder: Failed parsing input: app file users.go conflicts with same file imported from GOPATH と叱られる問題

問題 AppEngineなアプリケーションをGoで開発していて、もちろんコントローラとかモデルとかは、initがあるところとは別のディレクトリ切って作ったりするんだけど、意気揚々とgoapp serve ./すると以下のように叱られる % goapp serve ./ # 中略 ERROR 2016…

HerokuにDockerで動くアプリケーション(Go)をデプロイする

追記(2016/12/22) 任意のパッケージがインストールされた環境をHerokuにつくりたい、という目的でDockerを選択したけれど、Dockerfileに書かれているinstallコマンドは有効に動かない、みたいな情報を得ました。で、どうやらさいきんはbuildpackをうまいこ…

アメッシュをターミナルに表示して、ついでに雨降ってたらSlackでおしえてくれるところまで、Goでやったことのまとめ

go

このエントリはGo その2 Advent Calendar 2015 - Qiitaの8日目です。 7日目のS_Shiomtoriさんの記事もコマンドラインツールの話でした。 % go get github.com/otiai10/amesh/amesh % amesh -g 思ったことや詰まったこと書きます Goでコマンドラインツールを…

【Go言語】画像ファイルをbase64エンコード文字列にする、とその逆

go

package main import ( "encoding/base64" "io/ioutil" "os" ) func main() { f, err := os.Open("./hoge.png") if err != nil { panic(err) } defer f.Close() b, _ := ioutil.ReadAll(f) out, _ := os.Create("out") base64.NewEncoder(base64.StdEncoding…

【Go言語】inconsistent definition for type ほげ during import ふが

go

go test, go build, go runなどで以下のエラーが出る。エディタの警告にも出る。 inconsistent definition for type gorm.search during import struct { db *gorm. 以下略 inconsistent definition for type ほげ ってことで、たぶん同じ名前の違う定義が存…

【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がバグってんじゃねえのかと

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の初期化

しれっと可能だったのでメモ 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…