Skip to content

Goでタプルが実装されない(今のところの)理由と感想

たまたまgolang-nutsを見ていたら、タプルの話が挙がっていたので感想。

提案の内容はともかく、最初のほうでIanが書いているのは、

  • 構造体との使い分けが明確にならない
  • 「タプルを使うべきかどうか」で開発者を迷わせる結果は望んでいない(意訳)

ということらしい。proposal: Tuple Types for Goではプロトタイプを実装までしているのに捨てていて、まあまあ激しい。

過去にMackerelでScalaの学習をしていたとき、タプルは雑な型に名前を考えなくてもいいところが嬉しいという話があって、それは分かる1ので実装されたら使うとは思う。だけどいまは型パラメータがあるので、こういうの書いておけば個人的には困らない。

type tuple2[T1, T2 any] struct { V1 T1; V2 T2 }
func Tuple2[T1, T2 any](v1 T1, v2 T2) tuple2[T1, T2] {
return tuple2[T1, T2]{v1, v2}
}
t := Tuple2("one", 1)
  1. たまにチャネルで正常な値とエラーみたいに複数の値を送受信したくなる時はある