こんにちは、クラウドチームへ出張中の Junya です。
最近気づいて便利だった小ネタを3つ紹介します。
goのgenericsで任意のmapのキーを並べ替える
今更感あるのですが、go の generics 便利ですね。
map を決まった順番で処理したい場面があったんですが、genericsを使ってこんな関数を用意したら、
package function import "golang.org/x/exp/slices" func SortedKeys[V any](m map[string]V) []string { keys := make([]string, 0, len(m)) for k := range m { keys = append(keys, k) } slices.Sort(keys) return keys }
string キーのどんな map に対しても使えて便利でした。
package function import ( "reflect" "testing" ) func Test_sortedKeys(t *testing.T) { stringMap := map[string]string{ "key2": "value2", "key1": "value1", "key3": "value3", } intMap := map[string]int{ "key3": 3, "key1": 1, "key2": 2, } stringMapKeys := SortedKeys(stringMap) intMapKeys := SortedKeys(intMap) if !reflect.DeepEqual(stringMapKeys, []string{"key1", "key2", "key3"}) { t.Fatal("SortedKeys failed: ", stringMapKeys) } if !reflect.DeepEqual(intMapKeys, []string{"key1", "key2", "key3"}) { t.Fatal("SortedKeys failed: ", stringMapKeys) } }
SignedURL で frontend から直接GCSへアップロード
社内向けのツールで frontend から直接 GCS へファイルをアップロードしたいユースケースで、 GCS の SignedURL を活用できました。
めちゃ便利。
なお、発行された SignedURL を知られてしまったら、有効期限のあいだ、誰でも何でもアップロード出来てしまうのでご注意ください。
GoLand(Ubuntu)での日本語入力
開発で GoLand(Ubuntu) を使っているのですが、なぜか GoLand 内での日本語入力が出来ず、悩んでいました。
Mozc や Fcitx の問題かなと調べていたのですが、結果的には GoLand の Java ランタイムの問題で、 IDE の起動 Java ランタイムを変更する を参考に、Java のランタイムを JetBrains 提供のデフォルトのものから、Ubuntu 側の openjdk-17-jdk に切り替えることで解決しました。
なお、カスタムの Java ランタイムのパスは
~/.config/JetBrains/GoLand2024.1/goland.jdk
に保存されます。うまく動作しない場合は、このファイルを削除すると設定がリセットされます。
絶賛採用中
LOVOT のようなロボット開発というと、ハードウェアを扱っているイメージが強いですが、実際には、EC・データ分析・生産管理・業務システムなど、ロボット開発そのものではない開発も多岐にわたります。 GCP, Kubernetes, Go, TypeScript, Teraform などを用いたクラウド開発の分野でも人を募集しているので、ご興味のある方はぜひお声がけください!