Go言語におけるエイリアス型を使ったパターン
September 19, 2013
この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。
型のエイリアス
Go言語では、ある型に別名をつけ、別の型として使うことができる。 もちろん、組込み型へのエイリアス型を作ることもできる。
http://play.golang.org/p/wm5sWaa1J7
package main
import "fmt"
type Int int
func main() {
n := 100
m := Int(n) // キャスト
fmt.Printf("%T, %T", n, m)
}
メソッドの実装
別名をつけた新しい型には、別途メソッドを設ける事ができる。 組込み型にメソッドを設けたい場合は便利である。
package main
import "fmt"
type Hex int
func (h Hex) String() string {
return fmt.Sprintf("%#x", int(h))
}
func main() {
fmt.Println(Hex(100))
}
用途や単位としての型
単位が違う場合や用途が違う場合、同じ値でも同じように扱うことを避けたい場合がある。その場合は、共通型に別のエイリアスを付けることで、区別することができる。
http://play.golang.org/p/AIai9zuemn
package main
import "fmt"
type Meter int
type Kilogram int
type Person struct {
Name string
Height Meter
Weight Kilogram
}
type Female *Person
type Male *Person
func femaleOnly(f Female) {
fmt.Println(f.Name, "is a female.")
}
func main() {
yamada := &Person{"Yamada", Meter(172), Kilogram(60)}
fmt.Println(yamada)
femaleOnly(Female(yamada))
}