いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

golang

Goメモ-253 (go tool trace コマンドを使って実行トレースを見る)(runtime/trace)

概要 サンプル 参考情報 概要 以下自分用のメモです。よく忘れるのでメモメモ。。。 Goには標準で実行トレースを採取する機能がついています。pprofとかもあるのですが、手軽に扱えるのが runtime/trace さん。 これをトレースを取りたいプログラムの先頭で …

Goメモ-252 (文字列に対してのruneとbyteでの操作)

概要 サンプル 参考情報 概要 Goを始めた人からよく聞かれる内容なので、ついでにここにメモメモ。。。 Goで文字列は string ですが、他の言語と同様にイミュータブル(不変)です。 文字列の内容を一部だけ変更したい場合でも、新しい文字列を作る必要があ…

Goメモ-251 (チャネルの内容をスライスにする)(chans.Slice, chans.SliceContext)

概要 サンプル チャネル関連の記事 参考情報 概要 小ネタ。せっかくサンプル作ったので、ここにメモメモ。 チャネルを使って処理することはよくありますが、チャネルのデータをスライスにしてしまいたいときも結構あります。 Go 1.18 までは、それぞれの型ご…

Goメモ-250 (特定の値がスライスに含まれているかを判定)(slices.Contains)

概要 サンプル 参考情報 概要 以下、自分用のメモです。忘れないうちにメモメモ。。。 Go 1.18 が出るまではジェネリクスが無かったので、特定の値がスライスに含まれているかどうかは自分でループさせて確認するのがGoでは普通でした。 で、以前記事にした …

Goメモ-249 (特定のGOOS,GOARCHで標準ライブラリをpre buildする)

概要 試してみる 参考情報 概要 以下、自分用のメモです。忘れないうちにメモメモ。。。 多分、使うことは無いと思いますが、Tipsとして知っていても良いかも。 Goは、クロスコンパイルが得意な言語です。 特定のGOOSとGOARCH向けにコンパイルする際、当然そ…

Goメモ-248 (crypto/aesで暗号化と復号)(CBC, Cipher Block Chaining Mode)

概要 サンプル 参考情報 概要 以下、自分用のメモです。忘れないうちにメモメモ。。。 AESで暗号化する必要があったので、ECBモードとCBCモードで試してみました。 今回はCBCモードでの利用です。ECBの場合は参照情報をご参照ください。 ECBとかCBCって何?…

Goメモ-247 (crypto/aesで暗号化と復号)(ECB, Electronic Codebook Mode)

概要 サンプル 参考情報 概要 以下、自分用のメモです。忘れないうちにメモメモ。。。 AESで暗号化する必要があったので、ECBモードとCBCモードで試してみました。 今回はECBモードでの利用です。 ECBとかCBCって何?って方は Wikipedia の以下が分かりやす…

Goメモ-246 (セキュリティ的に安全な乱数を取得する)(crypto/rand, Reader)

概要 サンプル 参考情報 概要 cryptoパッケージの下の処理を利用しようとするときなどに、乱数が必要になるときがあります。 また、セキュリティ的に安全な乱数を取得したい場合もあります。 そのようなときに Go では、crypto/rand の中に rand.Reader が存…

Goメモ-245 (ビルド時にキャッシュを使わないように設定する)(force rebuild)

概要 参考情報 概要 以下、よく忘れるので自分用のメモです。 Goのビルドはキャシュが存在すれば、それを利用してくれるので速いです。 ですが、たまにキャッシュを使ってほしくないときがあります。 そのような時は、以下のように -a オプションを付与しま…

Goメモ-244 (GoでDeprecatedの表し方)

概要 試してみる 参考情報 概要 以下、よく忘れるので自分用のメモです。 Goで、特定の関数やメソッドなどを非推奨(Deprecated) にしたい場合は、関数ヘッダコメントの部分で Deprecated: xxxxx.... と記載すれば良いです。 stackoverflow.com で、staticch…

Goメモ-243 (flag.FlagSetを使う)

概要 サンプル 普通にflagパッケージを利用 flag.FlagSet を利用 ユニットテスト ついでに fuzz テスト Taskfile.yml 参考情報 概要 以下、よく忘れるので自分用のメモです。 Goには標準ライブラリにアプリケーション引数を処理してくれる flag パッケージが…

Goメモ-242 (charmbracelet/bubbletea にマルチバイトサポートが入った)(v0.22.1)

概要 参考情報 概要 忘れないうちにメモメモ。。TUIアプリを作る際によく話題に上がる charmbracelet/bubbletea の v0.22.1 がリリースされました。 内容みると、マルチバイトサポートが入ったとのこと。 github.com このPRを出してくれたのは mattn さん。…

Goメモ-241 (go testの結果をjson形式で出力)(go test -json, jq)

概要 参考情報 概要 いつも忘れるので、以下自分用のメモです。 たまに、go test の結果をプログラム側からいじりたいので json形式 で欲しいときがあります。 go test には、-json フラグがあるので、それを指定すると結果が JSON で取得できます。 (昔は、…

Goメモ-240 (go install したアプリを go clean で消す方法)

概要 参考情報 概要 いつも忘れるので、以下自分用のメモです。 作ったアプリを go install で $(go env GOPATH)/bin に置いた後に、後で削除したい場合は以下のようにします。 手で消しても同じなのですが、やっぱりコマンド経由でやりたい。 $ go clean -i…

Goメモ-239 (bep/logg というログライブラリ使ってみた)

概要 サンプル 参考情報 概要 bep/logg というログライブラリが公開されていて、ベンチマークの結果を見ると速かったのでちょっと触ってみました。 apex/log からフォークしたライブラリみたいですね。 まだ、バージョンは v0.1.0 だけど、シンプルな構成で…

Goメモ-238 (Go 1.19 がリリース)

概要 本家 その他の有用情報 参考情報 概要 先日、Go 1.19 がリリースされましたね。各所で情報を公開してくださっている方々がいっぱいいらっしゃるので忘れないうちに自分用にメモメモ。。。 本家 go.dev go.dev go.dev go.dev go.dev 個人的には、今回追…

Goメモ-237 (別プロセスにシグナルを送る)(os.FindProcess, /proc)

概要 サンプル Taskfile.yml sender receiver 実行結果 参考情報 概要 よく忘れるので、ここにメモメモ。。。 たまに、Goのプログラムから他のプロセスに対してシグナルを送りたいときがあります。 以下、サンプルです。 サンプル 2つのプログラムで試して…

Goメモ-236 (指定回数分テストを実行)(go test, count)

概要 サンプル Taskfile.yml lib.go lib_test.go 実行結果 参考情報 概要 よく忘れるので、ここにメモメモ。。。 goでテストを行う際、たまに所定の回数分テストを実行してほしいときがあります。 その場合、以下のように指定します。 $ go test -count N ./…

Gitpod で Go 1.19 のイメージを使う

追記(2022-08-10) 概要 参考情報 追記(2022-08-10) gitpod/workspace-go の latest タグが更新されましたので、latestタグのイメージが Go1.19 になっています。 なので、2022-08-10現在では以下のタグは利用しなくても Go1.19 が利用できるようになって…

Goメモ-235 (ランダムでテストの実行)(go test, shuffle)

概要 サンプル Taskfile.yml lib_test.go 実行結果 参考情報 概要 よく忘れるので、ここにメモメモ。。。 goでテストを行う際、たまにランダムでテストを実行してほしいときがあります。 その場合、以下のように指定します。 $ go test -shuffle on ./... サ…

Goメモ-234 (カバレッジの結果をHTMLで出力)(coverprofile, go tool cover)

概要 サンプル Taskfile.yml lib.go lib_test.go 実行結果 参考情報 概要 よく忘れるので、ここにメモメモ。。。 goでカバレッジを採取した後、それをHTMLで出力するには以下のようにします。 $ go test -coverprofile /path/to/coverage/result ./... $ go …

Goメモ-233 (ライブラリの利用可能バージョンを表示)(go list -m -versions)

概要 サンプル Taskfile.yml 実行結果 参考情報 概要 よく忘れるので、ここにメモメモ。。。 利用しているライブラリで、どのバージョンが利用可能なのかを調べるには以下のようにします。 サンプル Taskfile.yml version: "3" tasks: default: cmds: - go l…

Goメモ-232 (xmlのMarshal/Unmarshalで入れ子の要素を指定)

概要 サンプル 参考情報 概要 よく忘れるので、ここにメモメモ。。。 xml の Marshal/Unmarshal で入れ子の要素の値を取得する場合、ちゃんと要素毎に type 作って指定していくのが正道だと思いますが、面倒なので一気に取得したいときがあります。 んで、 x…

Goメモ-231 (メモリコピー無しで string から []byte へ変換する)(unsafe)

概要 サンプル 参考情報 概要 使うことはほぼ無いと思いますが、知っておくと役に立つときが来るかもしれません。 Goで string から []byte へ変換したい場合は、通常以下のように b := []byte(s) とします。これで何も問題ないのですが、内部ではメモリコピ…

Goメモ-230 (メモリコピー無しで []byte から string へ変換する)(unsafe)

概要 サンプル 参考情報 概要 使うことはほぼ無いと思いますが、知っておくと役に立つときが来るかもしれません。 Goで []byte から string へ変換したい場合は、通常以下のように s := string(buf) とします。これで何も問題ないのですが、内部ではメモリコ…

Goメモ-229 (マップはスレッドセーフではない)

概要 サンプル Taskfile.yml Mutexでクリティカルセクションを作っているサンプル 参考情報 概要 少し前に以下のメモをアップしました。 devlights.hatenablog.com 上記ではスライスでしたが、マップも同様です。 こちらはスライスとは違って、ちょっとでも…

Goメモ-228 (効率的に文字列を結合する)(Go Collective)

概要 サンプル main.go Taskfile.yml bench_test.go 参考情報 概要 Stackoverflowには Go Collective というのがあります。 stackoverflow.com The official Q&A channel for Google's Go Programming Language. と書いてある通り、公式のQ&Aとなっていて、…

Goメモ-227 (URLクエリからパラメータを取得)(Go Collective)

概要 サンプル main.go Taskfile.yml 参考情報 概要 Stackoverflowには Go Collective というのがあります。 stackoverflow.com The official Q&A channel for Google's Go Programming Language. と書いてある通り、公式のQ&Aとなっていて、いい質問と回答…

Goメモ-226 (http.ListenAndServeで起動したサーバをシャットダウンする)

概要 サンプル main.go Taskfile.yml 参考情報 概要 よく忘れるので、以下にメモメモ。。。 そのまま http.ListenAndServe で起動すると当然駄目なので、http.Server を作って起動します。 サンプル main.go package main import ( "context" "log" "net/htt…

Goメモ-225 (ジェネリックなビットフラグ処理)

概要 サンプル 参考情報 概要 以前にビットフラグについて、以下のような記事をアップしました。 devlights.hatenablog.com Go 1.18 からジェネリックが導入されたので、このような処理が汎用的に書けるようになりました。 てことで、ちょっとしたサンプルで…