サーチ…
基本型変換
Goには、2つの基本的なスタイル変換があります。
// Simple type conversion
var x := Foo{} // x is of type Foo
var y := (Bar)Foo // y is of type Bar, unless Foo cannot be cast to Bar, then compile-time error occurs.
// Extended type conversion
var z,ok := x.(Bar) // z is of type Bar, ok is of type bool - if conversion succeeded, z has the same value as x and ok is true. If it failed, z has the zero value of type Bar, and ok is false.
インタフェース実装のテスト
Goは暗黙的なインタフェースの実装を使用しているため、構造体が実装しようとしていたインタフェースを実装していない場合、コンパイル時エラーは発生しません。型キャストを使用して実装を明示的にテストすることができます:type MyInterface interface {Thing()}
type MyImplementer struct {}
func (m MyImplementer) Thing() {
fmt.Println("Huzzah!")
}
// Interface is implemented, no error. Variable name _ causes value to be ignored.
var _ MyInterface = (*MyImplementer)nil
type MyNonImplementer struct {}
// Compile-time error - cannot case because interface is not implemented.
var _ MyInterface = (*MyNonImplementer)nil
型を含むユニットシステムの実装
この例では、Goのタイプシステムを使用してユニットシステムを実装する方法を示しています。
package main
import (
"fmt"
)
type MetersPerSecond float64
type KilometersPerHour float64
func (mps MetersPerSecond) toKilometersPerHour() KilometersPerHour {
return KilometersPerHour(mps * 3.6)
}
func (kmh KilometersPerHour) toMetersPerSecond() MetersPerSecond {
return MetersPerSecond(kmh / 3.6)
}
func main() {
var mps MetersPerSecond
mps = 12.5
kmh := mps.toKilometersPerHour()
mps2 := kmh.toMetersPerSecond()
fmt.Printf("%vmps = %vkmh = %vmps\n", mps, kmh, mps2)
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow