寝ても覚めてもこんぴうた

プログラム書いたり、ネットワーク設計したり、サーバ構築したり、車いじったり、ゲームしたり。そんなひとにわたしはなりたい。 投げ銭は kyash_id : chidakiyo マデ

golang

今日 (2019/09/10) 現在のGAE/goをUPDATEする際の注意点、俺まとめ

Appengine/goが過渡期とでもいいましょうか、 日々変化も目まぐるしく、いろいろ気をつけるべき点もありそうなので雑にまとめました。 ご参考まで。(2019/09/10現在) GAE/go 1.9 は終わり 画像のとおりです。 警告: Go 1.9 ランタイム バージョンは非推奨…

goのベンチマークメモ

goのベンチマーク周りのメモです 2つのベンチマークの比較 godoc.org pprof のツール github.com goのパフォーマンス周りの資料(observability) bit.ly GoのSSA最適化 qiita.com おまけ 厳密なgofmt github.com go!

GAE/go1.11 で Stackdriver Profiler を使ってみる

appengine go1.11以降でgoでもプロファイラが使えるようなので初期設定だけやってみます。 内容的にはほぼ こちら の内容です。 Stackdriver Profiler は何ができるの? Goの場合には、CPU、ヒープ、競合、スレッドに関するプロファイリングが可能です。 そ…

Go で StartsWith/EndWith、前方一致/後方一致はないの?

Javaで育った私としては、前方一致/後方一致は StartsWith/EndWith というイメージが勝手にありますが、 goを書いているとたまにど忘れするので備忘録。 go での前方一致/後方一致 goでももちろん前方一致/後方一致のための関数は用意されています。 strings…

ab(ApacheBench) 的な負荷ツール hey を試す

ちょっとした負荷試験をしたい場合に、abが入っていればいいのですが、そうも行かない場合も多いので、go製で簡単にインストールできる hey を試します。 負荷ツールのタイプは2種類ある HTTPの負荷ツールには2タイプあります。 レスポンスが返される限り全…

モノレポ(mono repository)内でmodで管理しているアプリケーションをGAEにデプロイするために必要な2つのポイント

前回は モノレポ(mono repository)内でgoのmoduleを相対パスで利用する方法 という記事を書きましたが、今回はさらにモノレポで管理しているAppengineの複数のサービスをデプロイする方法になります。 なぜGAEのデプロイの記事が必要? 前回の記事を試した…

モノレポ(mono repository)内でgoのmoduleを相対パスで利用する方法

goの依存管理ツールはいろいろありますが、最新はGo Modules(mod)を利用することが多くなってきたと思います。 dep(vendor)を利用した依存解決の場合にはgopath配下にあればある程度柔軟に相対的に依存を解決できましたが、 modは普通に利用するとリポジトリ…

Appengineで初回1回だけ実行したい(設定の初期化)ときはwarmupを利用する

Appengine (GAE) はリクエストのイベントでインスタンスが起動されるので、通常のアプリケーションを実装した際に初回1回だけ実行する処理というのが普通に実装するとなかなか難しい。 特にDB(Datastore)アクセスなどが必要な場合にはrequestが無いとappen…

Raspberry Pi : goのインストールと設定を行う

Motivation 基本的には自分はgolangでプログラムを書くことが多いので、go入れておきます。 goのバイナリのダウンロード ここ のページからアーキテクチャが ARM のものを選択しましょう。 ブラウザからリンクを右クリックしてURLをコピーします 一応ホーム…

goでsliceのdeepcopyをする

タイトルのとおりなんですが、 goでsliceのディープコピーを作りたかったので。 やり方は以下。 orig := []string{"a", "b", "c", "d", "e", "f"} // 元sliceデータ fmt.Printf("%p, %v\n", orig, orig) // 0x10438150, [a b c d e f] copy := append([]stri…

Goでsliceをを結合する方法

Goのスライス同士を結合しようとした場合、 泥臭くループを回してappendをしようとしたあなた。ちょっと待って。✋ append のシグニチャをみてみる builtin.go を読んでみましょう func append(slice []Type, elems ...Type) []Type ほほう。 二つ目の引数は…

goで再帰的にディレクトリを作成する

goでディレクトリを作成する場合、 os.Mkdir("./hello", os.ModePerm) のような感じで簡単にディレクトリを作れますが、 深い階層まで再帰的にディレクトリを作成したい場合には以下の方法を利用します。 再帰的にディレクトリを作成する os.Mkdir は単一の…

constで定義した値(string)をポインタとして扱おうと思ったら怒られた

タイトルの通りですが、 goでconstで定義したstringの値をポインタとして渡したい箇所があり、 constで定義した値をそのまま渡そうと思ったら cannot take the address~~ みたいな形で怒られたのでメモ ざっくりとしたコード 具体的にはgoでS3のsdkを使って…

Goのio.Copyってio.CopyBufferってメソッドもあるし、バッファされてるんだっけ?

結論からいうと yes. です。 io.goのファイル内の実装で func Copy(dst Writer, src Reader) (written int64, err error) { return copyBuffer(dst, src, nil) } func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error) { if buf …

Appengineで本番環境のDatastoreのデータをローカルへ持ってくる方法

GCPUGのSlack で知ったネタの備忘録 本番環境のDatastoreのデータは appcfg.py を利用して取得することができる。 参考記事 : GAE/Goで本番のDatastoreをローカル環境に持ってくる 2016 - Qiita おまけ make でこんな感じに実行してもいいみたい replilocal:…

Goでio.Readerをbyteのスライスやstringに変換する方法

goでio.Readerからbyteのスライスやstringに変換する書き方をたまに忘れてしまうのでメモ。 コード // io.Readerをbyteのスライスに変換 func StreamToByte(stream io.Reader) []byte { buf := new(bytes.Buffer) buf.ReadFrom(stream) return buf.Bytes() }…

忘れがちなGoでbyteをstringに変換する方法をベンチマークしてみた。

golangでbyteをstringに変換する処理はたびたび発生するのですが、 手抜きで fmt.Sprintf("%s", byte) などとやっちゃうこともあるのでそれぞれの書き方でどれが速いのか確認してみた。 1) Sprintfを使うパターン fmt.Sprintf("%s", data) 2) string() を使…

Macのhomebrewでgoのupdateを行ったらエラーが発生する。

そろそろ新しいgoが入るかなと思い、 brew update;brew upgrade コマンドを実行したところ、go1.9がインストールされたので、既存のプロジェクトのテストを試しに実行してみたところ以下のようなエラーが発生した。 flag provided but not defined: -goversi…

direnvで言語に最適な環境をセットアップする

direnv使い始めようとしてましたが、言語に最適な環境をセットアップする機能なんてあったんですね。 layout program_name :その言語用の開発環境をセットアップ Go言語であれば layout go のように.envrcに書けば良いわけですね。ふむふむ。

Golangでは構造体にメソッドを生やせる。

Go言語のソースコードを読んでいた時に関数の定義がわかりづらいのがあった。 どうやら構造体にメソッドを実装することが出来るっぽい。 func (レシーバ名 レシーバの型) 関数名(引数) (戻り値) 定義はこんな感じ。 // 構造体宣言 type User struct { name s…

Golangのswitch文は暗黙でcaseの最後にbreakが入る

題名の通り、Go言語のswitch文は暗黙でcaseの最後にbreakが入ります。 なので i := 1 switch i { case 1: fmt.Println("1") case 2: fmt.Println("2") default: fmt.Println("other") } と書くとcase 1にマッチし、case 2には入りません。 fallthrough 逆にc…

IntelliJ IDEAにgolangのプラグインをインストールする方法

Go プラグインのインストール IntelliJを起動した際に Configure > Plugin を選択する Browse Repositoriesのボタンを押下し、検索窓に go と入力する。 Go と書かれているプラグインをインストールする。 Goプロジェクトの作成 IntelliJを起動し、Create Ne…

Mac (El Capitan) にgolangをインストールする方法

[注意] 事前にhomebrewのインストールは済ませておく 以下のコマンドを実行し、golangのインストールを行う。 brew install go 超簡単。