欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

go 语言多态、继承的实现方法、go interface 接口

程序员文章站 2022-06-14 11:00:18
...

在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。

(1)、 泛型编程

严格来说,在 Golang 中并不支持泛型编程。使用 interface 我们可以实现泛型编程,如下是一个参考示例:

  • 字符串排序
package main
import (
    "fmt"
    "sort"
)
// 将[]string定义为MyStringList类型
type MyStringList []string
// 实现sort.Interface接口的获取元素数量方法
func (m MyStringList) Len() int {
    return len(m)
}
// 实现sort.Interface接口的比较元素方法
func (m MyStringList) Less(i, j int) bool {
    return m[i] < m[j]
}
// 实现sort.Interface接口的交换元素方法
func (m MyStringList) Swap(i, j int) {
    m[i], m[j] = m[j], m[i]
}
func main() {
    // 准备一个内容被打乱顺序的字符串切片
    names := MyStringList{
        "3. Triple Kill",
        "5. Penta Kill",
        "2. Double Kill",
        "4. Quadra Kill",
        "1. First Blood",
    }
    // 使用sort包进行排序
    sort.Sort(names)
    // 遍历打印结果
    for _, v := range names {
            fmt.Printf("%s\n", v)
    }
}

Sort包、实现一个泛型 排序功能,用户定义的类型,只有实现 Len()、Less()和Swap()方法,就可以直接调用Sort()函数、对自定义类型数据进行排序。接下来在看下面例子:

package main
import (
        "fmt"
        "sort"
)

type Person struct {
   Name string
   Age  int
 }
   
func (p Person) String() string {
       return fmt.Sprintf("%s: %d", p.Name, p.Age)
 }
   
// ByAge implements sort.Interface for []Person based on
// the Age field.
type person []Person //自定义
 
func (a person) Len() int           { return len(a) }
func (a person) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a person) Less(i, j int) bool { return a[i].Age < a[j].Age }
   
 func main() {
       people := []Person{
           {"Bob", 31},
           {"John", 42},
           {"Michael", 17},
           {"Jenny", 26},
       }
   
       fmt.Println(people)
       sort.Sort(person(people))
       fmt.Println(people)
 }

这是自定义结构体类型数据排序的例子,通过此两个例子可以体会go 语言泛型编程的方法。在看一个简单的 interface 例子:

package main
import "fmt"
func main() {
        //空接口是万能类型,保存任意类型的值
        var i interface{} = 1
        fmt.Println("i = ", i)
 
        i = "abc"
        fmt.Println("i = ", i)
}

由此我们可以推断、sort 包的实现方式也应该采用空接口的类型、实现 Sort() 函数控制逻辑;所以用户只要实现 sort 包依赖的 Len()、Swap()和 Less()方法后,在调用 Sort()函数就能够满足多种类型的数据排序。

相关标签: golang 专栏