2022年8月4日木曜日

golang generics memo

go1.19になったので、ジェネリクス(go1.18から)をおさらい。

微妙に忘れそうなのでメモ。


<型違いの足し算>

演算子オーバーロードではないけれど、便利

type Addable interface{

    int64 | float64

}

func add[T Addable](a, b T) T {

    return a + b

}


<type set 派生型(近似)の雑な使い方>

・ダメな例(使い方が厳密)

type struct1 interface{

    int64 | float64

}

func func1[T struct1](v T){

    fmt.Println(v)

}

func1(int64(v))    //型が厳密


・雑に扱える例

type struct1 interface{

    ~int64 | ~float64

}

func func1[T struct1](v T){

    fmt.Println(v)    //型があいまい

}

func1(v)



<インターフェース定義を楽にする>

下記のパッケージに

package constraints

型が用意されてる

type Singed interface{}

type Unsinged interface{}

type Integer interface{}

type Complex interface{}

type Orderd interface{}









0 件のコメント:

コメントを投稿