zoukankan      html  css  js  c++  java
  • Golang微服务入门到精通之路3类的封装/继承/多态/接口类型 广深

    一、封装

    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

  • 相关阅读:
    bat 批处理命令 文件 类型 语法 格式 应用 详解
    CString,int,string,char*之间的转换
    机器名修改
    查看或修改SQL2005实例的端口号
    无法在数据库 'ycmis2' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。
    return另外一个用法
    tempdb多文件处理
    Oracle数据库表分区
    JavaWeb项目过滤器的编写
    略观SSH的优缺点
  • 原文地址:https://www.cnblogs.com/gsxl/p/15550156.html
Copyright © 2011-2022 走看看