golang 的 interface

目录

golang 中的 interface 除了有像其他编程语言接口这个概念,还有个非常重要和不同的概念就是:空接口
interface{},在 golang 中如果类型拥有 interface 所有定义的方法,那么就实现了这个接口,那么所有的类型都实现了空接口
golang 中没有泛型,但是所有要用到泛型的地方都可以使用空接口来实现

实现泛化的乘法

// 我们需要实现一个函数 Multi(a,b) 然后打印 a*b 如果 a = 1,b = 5 打印 1*5 ,如果 a = "12" , b = 5 打印 "1212121212"
type Myint struct {
  Value int
}
type Mystring struct {
  Value string
}

类型断言实现

func Multi1(a interface{}, b int) {
// a.(某个类型)
  {
    c, ok := a.(Myint)
    if ok {
      fmt.Println(c.Value * b)
    }
  }

  {
    c, ok := a.(Mystring)
    if ok {
      var t string
      for i := 0; i < b; i++ {
        t = t + c.Value
      }
      fmt.Println(t)

    }

  }

}

switch type 实现

func Multi2(a interface{}, b int) {
// a.(type)  结合 switch case 使用

  switch v := a.(type) {
  case Myint:
    fmt.Println(v.Value * b)
  case Mystring:
    var t string
    for i := 0; i < b; i++ {
      t = t + v.Value
    }
    fmt.Println(t)
  default:
    fmt.Println("type error")
  }
}

测试

func main() {
  var t Myint
  var t1 Mystring
  t = Myint{1}
  t1 = Mystring{"12"}
  Multi1(t, 5)
  Multi1(t1, 5)
  Multi2(t, 5)
  Multi2(t1, 5)
}

目录