型指定時にチルダを使って~intとか~stringとか出てきますが、どういう意味かというと基底型を意味するのだと。
例えば以下のコードは、
https://github.com/mushahiroyuki/lgo/blob/main/example/ch15/ex1506b.go
を多少修正したものですが、独自の型をstringの拡張として定義するとstringに~なしではコンパイルエラーになりますが~を付けることでstringの派生型も含めることが出来るわけです。
package main
import (
"fmt"
)
type BuiltInOrdered interface {
~string | int | int8 | int16 | int32 | int64 | float32 |
float64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr
}
func Min[T BuiltInOrdered](v1, v2 T) T {
if v1 < v2 {
return v1
}
return v2
}
type Mystring string
func main() {
var Astring Mystring = "a"
var Bstring Mystring = "b"
fmt.Println(Min(Astring, Bstring))
}
admin