DRYな備忘録

Don't Repeat Yourself.

go

cgoの中で#ifdefのようなプラットフォーム分岐をしてはいけない:clang: error: unsupported option '-fopenmp'

このエントリはGoのカレンダー | Advent Calendar 2022 - Qiitaの13日目です。多種多様なGoに関する記事を見ることができて、とても刺激になってます。ありがとう、クリスマス。ありがとう、アドベントカレンダー。当方はというと、最近ふつうにハマった問題…

datastore: invalid entity type

問題 cloud.google.com/go/datastore datastore package - cloud.google.com/go/datastore - pkg.go.dev を使ってDatastore | Google CloudにデータをPutしていて、掲題のエラーを得た。 ev := models.Event{/* なんらかの値 */} if _, err := tx.Put(key, e…

ameshコマンド & amesh Slack bot の最近の話

go

このエントリは Go 2 Advent Calendar 2020 - Qiita の8日目です。 背景 もう2年前になりますが、ソフトウェアを主業としない業界に転職しました 最近はストレス解消にコードを書いています。仕事ではいっさいコード書かない ameshコマンド、amesh-botは便利…

GoでWASMでHello World

背景 一応GoもやってるしWebのフロントエンドもある程度やっているのに、WASMなにも触ったこと無いのはよくないので触りたい WASMというものが一体何なのか、何ができるかも知らない tl;dr Goで書いたコードをwasmにするフラグをつけてビルドすると.wasmが手…

Go1.11でAppEngineをはじめる

tl;dr これの通りです Quickstart for Go 1.11 in the App Engine Standard Environment | App Engine standard environment for Go 1.11 docs | Google Cloud うごくやつです GitHub - otiai10/gae-go-sandbox 作業環境 % gcloud -v Google Cloud SDK 235.0…

Travis-CIによるイベントホームページ自動デプロイと告知ツイートの自動化 #YUKEMULI

背景 自分が関わっているイベントのホームページをGitHubで管理、GitHub Pagesでホストしているんですが、 masterブランチが更新されたら自動でデプロイしたい ホームページの更新内容ってほとんど「イベントに関する新しい情報」に他ならないので、これを自…

【Go言語】aws-sdk-goを使ったVPC新規作成からEC2のsshまで

前回これをやったので、 otiai10.hatenablog.com 今回は、これをGoのSDKからやる。 結果だけくれ はい github.com 以下ペライチ全文 package main import ( "flag" "fmt" "log" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "g…

【Go言語】aws-sdk-goでGoからEC2インスタンスの作成

注意: EC2インスタンスローンチ直後はPublicIPAddressがassociateされていないので、再帰的に時間とりつつDescribeInstanceしています。(func ensureの部分) package main import ( "flag" "fmt" "log" "time" "github.com/aws/aws-sdk-go/aws" "github.co…

【Go言語】複数並列goroutineの中でのSIGINTの捕捉

go

やりたいこと 複数立ち上がっているgoroutineの中で、それぞれ独立にSIGINT捕捉できるだろうか?という素朴な疑問 ソースコード 期待されるアウトプット「各goroutineのidとinterruptedというログが出る」 package main import ( "fmt" "os" "os/signal" "sy…

【Go言語】Ctrl+cなどによるSIGINTの捕捉とdeferの実行

go

問題 deferを使って後処理をしたい場合に、プロセスがCtrl+cなどSIGINTで中断されるとdeferしたものが発火しない。プロセス自体が中断されるのであたりまえなんだけども。 問題の再現 package main import ( "fmt" "time" ) func main() { defer teardown() …

【メモ】aws-sdk-goを使ったSecurityGroupの作成

tl;dr docs.aws.amazon.com 動くコード package main import ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ec2" ) func main() { sess := session.Must(session.NewSessionWithOpt…

【Go言語】bufio.Scannerの静かな突然死に3営業日ハマった

go

tl;dr bufio.ScannerでScanが終わってもErrはちゃんと見ましょう。以上。 問題 継続的に書き込みのあるTCP接続からの読み込みを、bufio.Scannerをつかって華麗に逐次読み込みしていた。が、どうやらそれが静かに切断され、クライアント(こちら)側のローカ…

Cgoを使ったパッケージと「Docker as Bug Report/Reproduce」というOSS運用について

このエントリはGo2 Advent Calendar 2017 - Qiitaの4日目です。 2017年は、着実にエロリツイート先生として実績を上げた1年でした、otiai10です。WETな方もよろしくお願いします。 Cgoを使った文字認識ライブラリがv2になりました Go言語には、Cgoという、…

【Go言語】準標準のWebSocketパッケージを使ったミニマムなチャットのサンプル

go

をつくって、こういう知見がたまったよ、みたいなの書こうと思ったんですが、Goの準標準パッケージである golang.org/x/net/websocket が便利すぎて「あ...できたわ」以上の感想が無いっていう現象になりました。 成果物はこちらです。ご査収ください。HTML…

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

go

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" と怒られる

追記 2018/08/01 gcloud components update 来てたので、した。 goapp serve の "There are too many files" Warning は無くなったけど、代わりに hot rebuild もなくなってる?% goapp versiongo version 1.9.4 (appengine-1.9.74) darwin/amd64— エロリツ…

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

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に立てればいいじゃない

追記 2018/07/26 このプロジェクトはDocker on Herokuに移行したので、一時的に「Deploy to Heroku」ボタンは動かなくなってます。Dockerでデプロイ可能なので、以下をご参考ください。 github.com 以下原文 このエントリはGo (その2) Advent Calendar 2016 …

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

追記 2017/11/29 この記事を書いた時点で無かったような気がするんですが、今はHerokuでDockerが動きます。無料で。すばらしい。 たとえばこのプロジェクトは完全にDockerでruntime定義してHerokuにホストしてあります。 github.com 以下原文 かつてこれ↓を…

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)を使うサンプル

go

参考 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 ほげ ってことで、たぶん同じ名前の違う定義が存…