在其中一个排序示例中,它们使用以下代码:

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 ByAge []Person

func (a ByAge) Len() int           { return len(a) }
func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a ByAge) 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(ByAge(people))
    fmt.Println(people)

}

带排序的行对我来说有点令人困惑:
sort.Sort(ByAge(people))

ByAge(people)是否生成某种构造函数来复制传递的数组?我不确定我是否了解新类型ByAge如何以其他方式访问元素。

最佳答案

语法foo(expr),其中foo是类型,而expr是类型转换,如spec中所述:



有关更多详细信息,请参见链接页面。

10-06 10:16