接口[1][2]

  1. 例子
package main

import "fmt"

type Sorter interface {
	Len () int
	Less (a, b int) bool
	Swap (i, j int)
}

//xi 和 xs都实现了sorter的三个函数所以他们都属于sorter,
//在sort函数中可以传入
type Xi []int
type Xs []string


func (p Xi) Len() int {
	return len(p)
}

func (p Xi) Less (a, b int) bool {
	return p[a] > p[b]
}

func (p Xi) Swap (a, b int) {
	p[a], p[b] = p[b], p[a]
}


func (p Xs) Len() int {
	return len(p)
}

func (p Xs) Less (a, b int) bool {
	return p[a] > p[b]
}

func (p Xs) Swap (a, b int) {
	p[a], p[b] = p[b], p[a]
}

func Sort(x Sorter) {
	for i := 0 ; i < x.Len() - 1; i ++ {
		for j := i + 1; j < x.Len(); j ++ {
      //调用less函数判断
			if x.Less(i, j) {
				x.Swap(i, j)
			}
		}
	}
}

func main() {
	ints := Xi{44, 67, 3, 17, 89, 10, 73, 9, 14, 8}
	strings := Xs{"nut", "ape", "elephant", "zoo", "go"}

	Sort(ints)

	fmt.Println(ints)

	Sort(strings)

	fmt.Println(strings)
}
  1. 创建一个显示最大数字的程序,同时工作于整数和浮点数。
package main

import "fmt"

func Less(l, r interface{}) bool {
  //判断l的类型
	switch l.(type) {
	case int:
    //如果赋值成功的话
		if _, ok := r.(int); ok {
			return l.(int) < r.(int)
		}
	case float32:
		if _, ok := r.(float32); ok {
			return l.(float32) < r.(float32)
		}
	}

	return false
}

func main() {
	var a, b, c int = 5, 15, 0
	var x, y, z float32 = 5.4, 29.3, 0.0


	if c = a; Less(a, b) {
		c = b
	}

	if z = x; Less(x, y) {
		z = y
	}
	fmt.Printf("c: %d", c)
	fmt.Printf("z: %f", z)

}

下一章是并发ヽ( ̄▽ ̄)و


  1. 题图出处 ↩︎

  2. 书本链接learning go ↩︎