Underlying Type
発端は slices.Concat を読んでいる際に見たジェネリクスにある ~
slices.go - Go
What’s New in Go 1.22: slices.Concat · The Ethically-Trained Programmer
Spec によれば Underlying Type というらしい
code:type.go
type MyInt int // int が underlying type
type MyString string // string が underlying type
構造体は?
code:struct.go
type User struct {
ID int
Name string
}
// 置き換えると type User = struct {...} とも考えられる
struct は struct 自身が underlying type
struct{ID int, Name string}の型リテラルの underlying type は自分自身
[]string, map[string]int, interface{} も型リテラル
多重継承は?(Goに継承はないけども)
code:inherit.go
type MyInt int
type MyIntInt MyInt // int が underlying type
predclaread bool, string, int (int8, unit8, float32...) の underlying type は自分自身
なおメソッドが継承されるのは interface, struct フィールドのみ
https://go.dev/play/p/cfEvZ3XW9Ar
資料
The Go Programming Language Specification - The Go Programming Language
入門Go言語仕様 Underlying Type / Go Language Underlying Type - Speaker Deck