一、封装
package main import "fmt" //封装 // 结果体先定义类属性 type Person struct { name string age int gender string } // 绑定属性 在方法名前加:(p Person) func (p Person) Eat() (msg string) { msg = "Person is eating:" + p.name //fmt.Println(msg) return } func main() { ppl := Person{ name: "泡泡龙", age: 23, gender: "男", } fmt.Println(ppl) fmt.Println(ppl.Eat()) }
二、继承
package main import ( "fmt" "strconv" ) /* 类与方法、属性注意点 pubic:大写开头 private:小写开头 */ // 父类 type Human struct { name string age int gender string } type Study struct { Human school string } func (s Study)my() { msg:="我叫:"+s.name+",来自"+s.school+"今年"+strconv.Itoa(s.age)+"岁" fmt.Println(msg) } func main() { ppl := Study{ Human: Human{"ppl", 20, "男"}, school: "深圳大学", } fmt.Println(ppl) ppl.my() }
三、多态
package main import ( "fmt" "strconv" ) // 定义一个接口类型 type IAttack interface { Attack() } type Level1 struct { name string level int } type Level2 struct { name string level int } func (p Level1) Attack() { fmt.Println("我叫"+p.name, ",我的等级为:"+strconv.Itoa(p.level)) } func (p Level2) Attack() { fmt.Println("我叫"+p.name, ",我的等级为:"+strconv.Itoa(p.level)) } func main() { var ppl IAttack // 定义一个 IAttack 接口类变量 // 低等级 p1 := Level1{ name: "天涯明月刀", level: 100, } // 高等级 p2 := Level2{ name: "倚天屠龙刀", level: 1000, } ppl = &p1 // 赋值给同一对象 ppl ppl.Attack() ppl = &p2 // 赋值给同一对象 ppl ppl.Attack() } /* 1.定义一个接口,里面设计好需要的接口,可以有多个 2.任何实现了这个接口的类型,都可以赋值给这个接口,从而实现多态 3.多个类之间不需要有继承关系 4.如果interface中定义了多个接口,那么实际的类必须全部实现接口函数,才可以赋值 */
四、接口类型
package main import "fmt" var a, b, c interface{} // 通用入参接口 func myType() { array := make([]interface{}, 3) array[0] = 1 array[1] = "ppl" array[2] = false for _, v := range array { switch v := v.(type) { case string: fmt.Println("this string ", v) case int: fmt.Println("this is ", v) case bool: fmt.Println("this is ", v) default: fmt.Println("this is error", v) } } } func main() { //var i, j, k interface{} names := []string{"ppl", "lili"} a = names fmt.Println("i:", a) age := 20 b = age fmt.Println("j:", b) str := "ppl" c = str fmt.Println("k:", c) myType() }
欢迎来大家QQ交流群一起学习:482713805