1. ホーム
  2. スクリプト・コラム
  3. ゴラン

Golang言語ミニマム型変換ライブラリキャストを詳しく使う

2022-01-07 23:19:56

01 はじめに

Golang言語のプロジェクト開発では、Golang言語が強型であるため、型変換がよく利用されます。今回は、型変換を容易にするための機能を提供し、開発効率を大幅に向上させるミニマルな型変換の三点セットである型変換三点セット - github.com/spf13/cast - を紹介します。

例えば、文字列を整数に変換するために cast.ToInt() を使用する場合、引数が "4" のような int 文字列である場合のみ整数に変換され、それ以外は整数の 0 値に変換されるのです。

実際、各種整数と浮動小数点型の変換が必要な場合は強制型変換を、各種整数と文字列の変換は標準ライブラリのstrconv演算を使えば良いのですが、どちらもエレガントな使い方ではありませんね。また、変換する値がインターフェイス型である場合、まず型をアサートしてから型変換を行う必要があり、いずれもややこしい。キャストはこれを簡単にし、私たちのコードをよりエレガントにするのです。

ToXxx()、cast.ToXxxE()関数を用いて、比較的よく使われる文字列型への変換など、簡単な例を挙げながらキャストの使い方を紹介します。

02 文字列型に変換する

与えられた引数を文字列型に変換するには cast.ToString() 関数を使用します。与えられた引数を文字列型に変換できない場合は、型ゼロの値(文字列型ゼロ - 空文字列)を返します。

コード例です。

a := 1
fmt.Printf("val=%v type=%T\n", cast.ToString(a), cast.ToString(a))
b := 3.14
fmt.Printf("val=%v type=%T\n", cast.ToString(b), cast.ToString(b))
c := "hello"
fmt.Printf("val=%v type=%T\n", cast.ToString(c), cast.ToString(c))
d := []byte("golang")
fmt.Printf("val=%v type=%T\n", cast.ToString(d), cast.ToString(d))
var e interface{} = "frank"
fmt.Printf("val=%v type=%T\n", cast.ToString(e), cast.ToString(e))
f := []int{1, 2, 3}
fmt.Printf("val=%v type=%T\n", f, f)
fmt.Printf("val=%v type=%T\n", cast.ToString(nil), cast.ToString(nil))

出力結果です。

val=1 type=string
val=3.14 type=string
val=hello type=string
val=golang type=string
val=frank type=string
val= type=string // 値は空の文字列です。
val= type=string // 値は空の文字列です。

上のコードを読むと、最後の2行はどちらも空文字列を出力しています。そこで、cast.ToStringE()関数を使って引数fを変換して、その戻り値を見ます。

コード例です。

v, err := cast.ToStringE([]int{1,2,3})
if err ! = nil {
  fmt.Println(err)
  return
}
fmt.Printf("val=%v type=%T\n", v, v)

出力結果です。

型 []int{1, 2, 3} を文字列にキャストできません。

上記のコードを読むと、同じ引数を異なる関数(cast.ToString()とcast.ToStringE())を使用して、異なる結果を返していることがわかります。

ToStringE()ですが、castが返したエラーを無視するだけです。

ソースコードです。

// ToString casts an interface to a string type.
func ToString(i interface{}) string {
 v, _ := ToStringE(i)
 return v
}

cast.ToxxE()関数を使って、変換後に得られる型ゼロの値がエラーであるかどうかを判断することができます。

03 まとめ

この記事では、開発効率を大幅に向上させ、コードをよりエレガントにし、より簡単かつ安全に型変換を操作できるようにする、最小限の型変換のためのトリプレット・ライブラリであるcastを紹介します。

ToString()関数です。そのほかにも、今回は取り上げないが多くの型をサポートしているので、興味のある方は公式ドキュメントやソースコードを読んで詳細を確認することをお勧めする。

Golang言語最小限の型変換ライブラリcastについての記事は以上です。Golang型変換ライブラリcastの詳細については、過去の記事を検索するか、以下の関連記事を引き続きご覧ください。