いろいろ備忘録日記

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

golang

Goメモ-224 (スライスはスレッドセーフではない)

概要 サンプル Taskfile.yml データ競合が発生する版 データ競合が発生しないようにする(1) データ競合が発生しないようにする(2) データ競合が発生しないようにする(3) 参考情報 概要 Goは、非同期処理が比較的簡単に書けるので、ちょちょいと書い…

Goメモ-223 (bufio.Scanner で カスタムな bufio.SplitFunc を利用するやり方)

概要 サンプル 参考情報 概要 使うことはほぼ無いかもしれませんが、知ってるとちょっと便利かもしれません。 bufio.Scanner さん に対して、独自のデリミタでSplitしてほしい場合、bufio.SplitFunc を作って渡します。 このやり方がちょっと難しかったので…

Goメモ-222 (Goが対応している GOOS/GOARCH の組み合わせを出力)

概要 サンプル Taskfile.yml 参考情報 概要 よく忘れるので、忘れないうちにメモメモ。。 Goでクロスコンパイルするときに、GOOSとGOARCHを設定する必要がありますが、それの一覧を出力するやり方。 Goの標準コマンドで出力できます。 $ go tool dist list …

Goメモ-221 (構造体のタグ情報(Struct Tag)を取得)

概要 サンプル 参考情報 概要 Go には構造体のフィールドにタグをつけることができます。一種のメタ情報ですね。 jsonやxmlやyamlを処理する際によくお世話になる `json:"id"` とかのやつです。 基本的に利用するライブラリが定義しているタグを指定して使う…

gocloc (Goで作られた cloc クローン)

概要 サンプル 参考情報 概要 Goで作られた cloc クローン。使いやすいですねー。作者さんに感謝です。 github.com サンプル 試しに、自分のリポジトリ でやってみたら、以下のように出力されました。 gitpod /workspace/try-golang (master) $ go run githu…

Goメモ-220 (標準ライブラリのpluginパッケージで簡易プラグイン処理)

概要 サンプル lib/pkg/strs/upper.go lib/lib.go main.go Taskfile.yml ビルドしてみる 参考情報 概要 知っていると少し便利かもしれないTipsです。 Goには標準ライブラリで plugin というパッケージが用意されていて、シンプルにプラグイン処理が出来ます…

Goメモ-219 (Go が 内部で利用しているスレッド数を表示するサンプル)

概要 参考情報 概要 Goで実際に利用されているOSのスレッド数を知りたいときはなかなか無いと思いますが、知識としてしっておくといいかもしれないですね。 以下のサンプルでは、変化をわかりやすくするために、一つのゴルーチン毎に runtime.LockOSThread()…

Goメモ-218 (Atom Feed を読み込むサンプル)

概要 参考情報 概要 たまーに使うことがあるので、忘れないうちにメモメモ。 一つ前の記事で RSS2.0 を読み込むサンプルをアップしていますが、同じ形でAtom Feedも読み込んでみます。 前回と同じように取得対象はこのブログにしています。 package main imp…

Goメモ-217 (RSS 2.0 を読み込むサンプル)

概要 参考情報 概要 たまーに使うことがあるので、忘れないうちにメモメモ。 Goでは、JSONと同じようにXMLの場合も Struct Tags を付与できるので、解析がとても楽ですね。 試すサイトは、他サイト様にすると迷惑がかかるので、このブログにしました。 packa…

Goメモ-216 (time.Time から時刻部分をクリアしたい場合)

概要 参考情報 概要 たまーに使うことがあるので、忘れないうちにメモメモ。 time.Truncate は、指定した time.Duration 区切りの時間にしてくれるので、ここに 24 時間を指定します。 package times import ( "time" "github.com/devlights/gomy/output" "g…

Goメモ-215 (archive/tar を使ったtarファイル生成サンプル)

概要 参考情報 概要 たまーに使うことがあるので、忘れないうちにメモメモ。 /* archive/tar の サンプルです。 REFERENCES: - https://pkg.go.dev/archive/tar@latest */ package main import ( "archive/tar" "os" "time" ) func _err(err error) { if err…

Goメモ-214 (archive/zip を使ったZipファイル生成サンプル)

概要 概要 たまーに使うことがあるので、忘れないうちにメモメモ。 /* archive/zip の サンプルです。 REFERENCES: - https://pkg.go.dev/archive/zip@latest */ package main import ( "archive/zip" "bufio" "os" "time" ) func _err(err error) { if err …

Goメモ-213 (runtime.Goschedについて)(yield, 実行権の放棄)

概要 サンプル 概要 runtime.Gosched() について。 滅多に使うことはないと思いますが、知識としてしっておくと便利かもしれません。 他の言語では yield って名前で用意されていることが多いですね。 (C# とか Java とか) 「実行権の放棄」という日本語で呼…

Goメモ-212 (log.Fatalとlog.Panicの違い)

概要 サンプル log.Fatal log.Panic Taskfile.yml 実行結果 概要 何気に違いをちゃんと知らなかったので、忘れないうちにメモメモ。。。 log.Panicの方はpanicが呼ばれるので defer が処理される log.Fatalの方はdeferが処理されない log.Fatalの方はOSへ戻…

Goメモ-211 (The Go Programming Language and Environment)(Goの作者5人による寄贈記事)

概要 概要 忘れないうちにメモメモ。。。 cacm.acm.org Goを作った以下の5人のエンジニアによる寄贈記事。 Russ Cox Robert Griesemer Rob Pike Ian Lance Taylor Ken Thompson Goの生まれた理由やGoの歴史やGoの言語仕様を一通り説明など。 読んでてとても…

Goメモ-210 (golang.org/x/exp/maps)(Go 1.18 リリース時には含まれなかった汎用マップ処理)

概要 サンプル 概要 忘れないうちにメモメモ。。。便利ですね。そのうち標準ライブラリに含まれるのを希望。 pkg.go.dev サンプル package exp_maps import ( "github.com/devlights/gomy/output" "golang.org/x/exp/maps" ) // ExpMaps -- Go 1.18 リリース…

Goメモ-209 (golang.org/x/exp/slices)(Go 1.18 リリース時には含まれなかった汎用スライス処理)

概要 サンプル 概要 忘れないうちにメモメモ。。。便利ですね。そのうち標準ライブラリに含まれるのを希望。 pkg.go.dev サンプル package exp_slices import ( "github.com/devlights/gomy/output" "golang.org/x/exp/slices" ) // ExpSlices -- Go 1.18 リ…

Goメモ-208 (golang.org/x/exp/constraints)(Go 1.18 リリース時には含まれなかった制約型)

概要 サンプル 概要 忘れないうちにメモメモ。。。便利ですね。そのうち標準ライブラリに含まれるのを希望。 pkg.go.dev サンプル package exp_constraints import ( "github.com/devlights/gomy/output" "golang.org/x/exp/constraints" ) type myStr strin…

Goメモ-207 (sliceの3つ目のインデックスパラメータの使い方)

概要 サンプル 参考情報 概要 知らなかったので忘れないうちにメモメモ。。。 使う機会は正直ほとんど無いと思いますが、知識として。 Goのスライスって、よく s[i:j] のようにすることがありますが 実は python とかのように3つ目を指定できます。 以下のよ…

Goメモ-206 (sliceにデータを追加する際のパフォーマンス比較について)

概要 概要 たまに聞かれるのと、その都度ベンチマーク書いているような気がしたので、以下にメモメモ。。。 package main import ( "strconv" "testing" ) func BenchmarkSliceLen0Append(b *testing.B) { var ( s []string ) b.StartTimer() for i := 0; i …

Goメモ-205 (ジェネリクスを使うとき・使わないときの指針)

概要 概要 結構シンプルに大事なことを言っているなと思ったので、ここにメモメモ。。。 Go本家のブログにて go.dev という記事がGo 1.18のリリースと共に出ていまして、その内容です。 中に、使うべきときや使わない方が良いときなどが書いてあるのですが、…

Goメモ-204 (windowsでexe実行時にコマンドプロンプトが出ないようにビルド, windowsgui)

概要 サンプル 参考情報 概要 たまーに使うことがあるので、ここにメモメモ。。。 CUIツール作ってて、場合によってはコマンドプロンプトが表示されてほしくないときもあります。 そういうときは、以下のようにビルドします。 go build -ldflags "-H windows…

Goメモ-203 (Goで非同期処理する際のガイドブック的な資料, go-concurrency-guide)

概要 参考情報 概要 とても勉強になるリポジトリを見つけたので、忘れない内にメモメモ。。。 書籍 「Go言語による並行処理」、「プログラミング言語Go」のサンプルを元にして作ったと説明されていますね。 github.com 参考情報 本ブログでもGoの非同期処理…

Goメモ-202 (type alias と defined type の違い)

概要 概要 結構、周りから違いが分からないと聞かれることが多いので、ここにメモメモ。。。 実際に見たほうがわかりやすいと思いますので、以下にサンプルを。 package types import ( "strings" "github.com/devlights/gomy/output" ) type typeAlias = st…

Goメモ-201 (無償で読めるGoの電子書籍 (softchris/golang-book))

概要 概要 以下自分用のメモです。忘れないうちにここにメモメモ。。。 まだ、読めていないのですが Go 1.17 と結構最近のバージョンを対象としてくれているので助かりますね。 基本的な言語機能からスタートしているので、Tour of Go をやった後とかに読む…

Goメモ-200 (static linkedなバイナリを作る)(os/user, net, 静的リンク)

概要 普通にアプリ作って確認 os/user or net パッケージを使うと? CGO_ENABLED=0 を指定 osusergo, netgo のタグをビルド時に付与 参考情報 概要 以下自分用のメモです。よく忘れるのでここにメモメモ。。。 以下はLinux上での話です。 Goでは、標準ライブ…

Goメモ-199 (*exec.Cmd 実行時にコマンドの引数指定にスライスを使う)

概要 サンプル 参考情報 概要 以下自分用のメモです。よく忘れるのでここにメモメモ。。。 別に (*exec.Cmd) 専用でもなんでもないのですが、コマンド引数を指定する際に引数のリストをスライスで持っている場合、go の three dot (...) の機能を使って、そ…

Goメモ-198 (*exec.Cmd 実行時にワーキングディレクトリを指定する)

概要 サンプル 参考情報 概要 以下自分用のメモです。よく忘れるのでここにメモメモ。。。 外部コマンド実行時に特定のディレクトリをワーキングディレクトリにして開始したい場合があります。 その場合は (*exec.Cmd).Dir に値を設定することで可能となりま…

Goメモ-197 (*exec.Cmd 実行時に追加の環境変数を渡す)

概要 サンプル 参考情報 概要 以下自分用のメモです。よく忘れるのでここにメモメモ。。。 外部コマンド実行時に追加の環境変数を指定したい場合がたまにあります。 その場合は (*exec.Cmd).Env に値を追加したスライスを再設定することで可能となります。 …

git pull した後にファイルの日付をコミット時のものに変更する

概要 サンプル 概要 たまーに必要になるときがあるので、ここにメモメモ。。。 gitとかの最近のソース管理ソフトウェアは、「コミット時の日付」を復元してくれません。pullするとその時点の日付でファイルが作成されます。(当たり前ですが) SVNではオプシ…