既存のメソッド Scan の仕様が range から呼ばれた関数の要求仕様にちょうどマッチしてた。
package main import ( "fmt" "github.com/tidwall/btree" ) func main() { var users btree.Map[string, string] // add some users users.Set("user:4", "Andrea") users.Set("user:6", "Andy") users.Set("user:2", "Andy") users.Set("user:1", "Jane") users.Set("user:5", "Janet") users.Set("user:3", "Steve") // Iterate over the maps and print each user for key, value := range users.Scan { fmt.Printf("%s %s\n", key, value) } }
$ env GOEXPERIMENT=rangefunc go run main.go user:1 Jane user:2 Andy user:3 Steve user:4 Andrea user:5 Janet user:6 Andy
tidwall さんは、transform というフィルターパッケージの開発者で、よいプロダクトをいろいろ作ってる人なので、もうこれでいいかなぁ感 ( これのSTAR数も前に確認した2022-04-30時点から、680→982 に増えてる )