Inside of LOVOT

GROOVE X 技術ブログ

最近の小ネタ3つ

こんにちは、クラウドチームへ出張中の 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 などを用いたクラウド開発の分野でも人を募集しているので、ご興味のある方はぜひお声がけください!

recruit.jobcan.jp