深入理解go中interface机制

Written by

in

文章目录
  • go的interface是一组method的集合,不关心属性(数据),只关心行为(方法)。具体使用中你可以自定义自己的 struct,并提供特定的 interface 里面的 method 就可以把它当成 interface 来使用
  • package main import “fmt” type Speaker interface { Say() string } type User struct { id int64 `UserService` name string } func (user *User) Say() string { return “aaaa” } func (user *User) Say1() string { return “aaaa1” } func main() { var user = &User{ 1, “aa”, } var s Speaker s = user fmt.Println(s.Say()) } func speak(s Speaker) { fmt.Println(s.Say()) } 也可以定义多个interface package main import “fmt” type Speaker interface { Say() string } type Speaker1 interface { Say1() string } type User struct { id int64 `UserService` name string } func (user *User) Say() string { return “aaaa” } func (user *User) Say1() string { return “aaaa1” } func main() { var user = &User{ 1, “aa”, } var ( s Speaker s1 Speaker1 ) s = user s1 = user fmt.Println(s.Say()) fmt.Println(s1.Say1()) } func speak(s Speaker) { fmt.Println(s.Say()) } 也可以使用接口的组合 package main import “fmt” type Speaker interface { Speak() string } type Mover interface { Move() string } type Hello interface { Speaker Mover } type User struct { Name string } func (a User) Speak() string { return “aaa” } func (a User) Move() string { return “bbb” } func main() { user := User{Name: “aa”} showRobot(&user) } func showRobot(r Hello) { fmt.Println(“Speak:”, r.Speak()) fmt.Println(“Move:”, r.Move()) }
  • package main import “fmt” func describe(i interface{}) { switch v := i.(type) { case int: fmt.Println(“整型: “, v) case string: fmt.Println(“字符串:”, v) case bool: fmt.Println(“布尔值:”, v) default: fmt.Println(“未知类型: “, v) } } func main() { describe(66) describe(“aa”) } 输出结果为
  • interface是 Go 语言中实现多态性和代码复用的重要机制,能够让你编写更加通用和灵活的代码,可以利用它更好编码 到此这篇关于深入理解go中interface机制的文章就介绍到这了,更多相关go interface机制内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Go语言interface详解 golang中interface接口的深度解析 Golang中interface{}转为数组的操作 Golang 实现interface类型转string类型 Golang中的Interface详解 go语言中的interface使用实例 golang基础之Interface接口的使用 golang 实现interface{}转其他类型操作 浅谈Golang 嵌套 interface 的赋值问题 Go之interface的具体使用
  • 目录
    • 前言
    • interface使用
      • 类型判断
    • 总结

      go的interface是一组method的集合,不关心属性(数据),只关心行为(方法)。具体使用中你可以自定义自己的 struct,并提供特定的 interface 里面的 method 就可以把它当成 interface 来使用

      package main
      
      import "fmt"
      
      type Speaker interface {
          Say() string
      }
      
      type User struct {
          id   int64 `UserService`
          name string
      }
      
      func (user *User) Say() string {
          return "aaaa"
      }
      
      func (user *User) Say1() string {
          return "aaaa1"
      }
      
      func main() {
          var user = &User{
             1, "aa",
          }
          var s Speaker
          s = user
          fmt.Println(s.Say())
      }
      
      func speak(s Speaker) {
          fmt.Println(s.Say())
      }
      

      也可以定义多个interface

      package main
      
      import "fmt"
      
      type Speaker interface {
          Say() string
      }
      
      type Speaker1 interface {
          Say1() string
      }
      
      type User struct {
          id   int64 `UserService`
          name string
      }
      
      func (user *User) Say() string {
          return "aaaa"
      }
      
      func (user *User) Say1() string {
          return "aaaa1"
      }
      
      func main() {
          var user = &User{
             1, "aa",
          }
          var (
             s  Speaker
             s1 Speaker1
          )
          s = user
          s1 = user
          fmt.Println(s.Say())
          fmt.Println(s1.Say1())
      }
      
      func speak(s Speaker) {
          fmt.Println(s.Say())
      }
      

      也可以使用接口的组合

      package main
      
      import "fmt"
      
      type Speaker interface {
          Speak() string
      }
      
      type Mover interface {
          Move() string
      }
      
      type Hello interface {
          Speaker
          Mover
      }
      
      type User struct {
          Name string
      }
      
      func (a User) Speak() string {
          return "aaa"
      }
      
      func (a User) Move() string {
          return "bbb"
      }
      
      func main() {
         
          user := User{Name: "aa"}
      
         
          showRobot(&user)
      }
      
      func showRobot(r Hello) {
          fmt.Println("Speak:", r.Speak())
          fmt.Println("Move:", r.Move())
      }
      

      package main
      
      import "fmt"
      
      func main() {
          var i interface{} = "Hello, World!"
      
          // 使用单值类型断言
          s := i.(string)
          fmt.Println(s) // 输出: Hello, World!
      
          // 如果类型不匹配,会抛出 panic
          n := i.(int)
          fmt.Println(n)
      }
      

      结果为

      package main
      
      import "fmt"
      
      func describe(i interface{}) {
          switch v := i.(type) {
          case int:
             fmt.Println("整型: ", v)
          case string:
             fmt.Println("字符串:", v)
          case bool:
             fmt.Println("布尔值:", v)
          default:
             fmt.Println("未知类型: ", v)
          }
      }
      
      func main() {
          describe(66)
          describe("aa")
      }
      

      输出结果为

      interface是 Go 语言中实现多态性和代码复用的重要机制,能够让你编写更加通用和灵活的代码,可以利用它更好编码

      到此这篇关于深入理解go中interface机制的文章就介绍到这了,更多相关go interface机制内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Go语言interface详解
      • golang中interface接口的深度解析
      • Golang中interface{}转为数组的操作
      • Golang 实现interface类型转string类型
      • Golang中的Interface详解
      • go语言中的interface使用实例
      • golang基础之Interface接口的使用
      • golang 实现interface{}转其他类型操作
      • 浅谈Golang 嵌套 interface 的赋值问题
      • Go之interface的具体使用

      站内搜索