// 新类型clusterSlotSlice是自定义类型
// 老类型[]*clusterSlot是类型字面量
// 因为[]*clusterSlot不是自定义类型,也不是预定义类型。
// 新类型clusterSlotSlice的用途是:用于排序。
type clusterSlotSlice []*clusterSlot
func (p clusterSlotSlice) Len() int {
return len(p)
func (p clusterSlotSlice) Less(i, j int) bool {
return p[i].start < p[j].start
func (p clusterSlotSlice) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
func main() {
oldType是自定义类型demo:
注:新类型不继承老类型的方法。
注:新类型继承老类型的操作,如:range,len,cap等。
package main
import "fmt"
// XiaoYiOne 创建一个自定义类型
// 老类型是类型字面量
type XiaoYiOne struct {
Name string
Age int64
// 返回姓名
func (xy1 XiaoYiOne) GetName() string {
return xy1.Name
// XiaoYiTwo 创建一个自定义类型
// 老类型是自定义类型
type XiaoYiTwo XiaoYiOne
// 返回年龄
func (xy2 XiaoYiTwo) GetAge() int64 {
return xy2.Age
func main() {
var xy1 XiaoYiOne
var xy2 XiaoYiTwo
xy1 = XiaoYiOne{
Name: "xiaoYi",
Age: 18,
xy2 = XiaoYiTwo(xy1)
fmt.Println(xy1.GetName())
fmt.Println(xy2.GetAge())
// 方法不继承
// Unresolved reference 'GetName'
fmt.Println(xy2.GetName)