33
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go言語におけるエイリアス型を使ったパターン

Last updated at Posted at 2013-09-18

型のエイリアス

Go言語では、ある型に別名をつけ、別の型として使うことができる。
もちろん、組込み型へのエイリアス型を作ることもできる。

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))
}

用途や単位としての型

単位が違う場合や用途が違う場合、同じ値でも同じように扱うことを避けたい場合がある。その場合は、共通型に別のエイリアスを付けることで、区別することができる。

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))

}
33
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?