直接上代码:
首先,我定了三个接口、一个结构和三个方法:
type DeptModeFull interface { Name() string SetName(name string) Relocate(building string, floor uint8)}type DeptModeA interface { Name() string SetName(name string)}type DeptModeB interface { Relocate(building string, floor uint8)}type Dept struct { name string building string floor uint8 Key string} func (self Dept) Name() string { return self.name } func (self Dept) SetName(name string) { self.name = name } func (self *Dept) Relocate(building string, floor uint8) { self.building = building self.floor = floor }
而后我写了一些测试代码:
dept1 := Dept{ name: "MySohu", building: "Internet", floor: 7}switch v := interface{}(dept1).(type) {case DeptModeFull: fmt.Printf("The dept1 is a DeptModeFull.\n")case DeptModeB: fmt.Printf("The dept1 is a DeptModeB.\n")case DeptModeA: fmt.Printf("The dept1 is a DeptModeA.\n")default: fmt.Printf("The type of dept1 is %v\n", v) } deptPtr1 := &dept1if _, ok := interface{}(deptPtr1).(DeptModeFull); ok { fmt.Printf("The deptPtr1 is a DeptModeFull.\n") }if _, ok := interface{}(deptPtr1).(DeptModeA); ok { fmt.Printf("The deptPtr1 is a DeptModeA.\n") }if _, ok := interface{}(deptPtr1).(DeptModeB); ok { fmt.Printf("The deptPtr1 is a DeptModeB.\n") }
打印出的内容:
The dept1 is a DeptModeA. The deptPtr1 is a DeptModeFull. The deptPtr1 is a DeptModeA. The deptPtr1 is a DeptModeB.