Go语言方法和接口

2018-09-28  本文已影响0人  AuglyXu
type Person struct{
  name string
  age int
}
func (Person)say(){
  fmt.Printf("Hello")
}

p := Person{"xxz",18}
p.say()//"Hello"
type Person struct{
  name string
  age int
}
func (per Person)say(){
  fmt.Println("Hello",per.name)
}
p := Person{"xxz",18}
p.say()//"Hello xxz"
type Person struct{
  name string
  age int
}
func (per *Person)setAge(age int){
  per.age = age
}

per := Person{"xxz",18}
per.say()//"Hello xxz"
//p := &per
//(*p).setAge(666)
per.setAge(666) // 底层相当于(&per).setAge(666)
fmt.Println(per)//{"xxz",666}

Go语言接口

/*
需求:定义一个函数,实现电器的打开和关闭
*/
type USB interface{
  start()
  end()
}
type Computer struct{
  name string
}
func (c Computer)start(){
  fmt.Println(c.name,"被打开了")
}
func (c Computer)end(){
  fmt.Println(c.name,"被关闭了")
}

type Phone struct{
  name string
}
func (ph Phone)start(){
  fmt.Println(ph.name,"被打开了")
}
func (ph Phone)end(){
  fmt.Println(ph.name,"被关闭了")
}

func main(){
  var in USB
  var cm Computer = Computer{"三星"}
  Option(cm)
  var ph Phone = Phone{"苹果"}
  Option(ph)
}
function Option(in USB){
  in.start()
  in.end()
}

空接口

var value interface{}
var arr [3]interface{}
arr[0] = 1
arr[1] = "lnj"
arr[2] = false
fmt.Println(arr)

接口类型转换(类型断言)


type USB interface{
  start()
}

type Computer struct{
  name string
}
func (cm Computer)start(){
  fmt.Println(cm.name,"被打开了")
}

func main(){
  var cm Computer = Computer{"华硕"}
  in USB := cm
  //fmt.Println(in.name) 报错
  value,ok := in.(Computer)
  fmt.Println(value.name)//"华硕"
  fmt.Println(ok)//True
}
cm := 接口变量名.(type)
    switch cm := in.(type) {
    case Computer:
        fmt.Println(cm)
        cm.say()
    default:
        fmt.Println("不是Person类型")
    }
cm := Computer{"惠普"}
    var sce []interface{} = []interface{}{1, 3.14, false, "lnj", cm}
    // 需求: 获取切片中保存的每一个数据的原始类型
    for key, value := range sce {
        switch temp := value.(type) {
        case int:
            fmt.Println("第",key, "个元素是int类型")
        case float64:
            fmt.Println("第",key, "个元素是float64类型")
        case bool:
            fmt.Println("第",key, "个元素是bool类型")
        case string:
            fmt.Println("第",key, "个元素是string类型")
        case Computer:
            fmt.Println("第",key, "个元素是Computer类型")
            temp.say()
        }
    }
var in interface{} = Computer{"华硕"}
//第一种
if value,ok := in.(USB);ok{
  value.start()
}
//第二种
if value,ok := in.(Computer);ok{
  value.start()
}
上一篇 下一篇

猜你喜欢

热点阅读