为什么我可以从 Go 中的类型调用 f​​unc?

mik*_*tux 0 methods function go

我正在学习围棋,在进行“围棋之旅”时,我发现了以下代码:

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("Good morning!")
    case t.Hour() < 17:
        fmt.Println("Good afternoon.")
    default:
        fmt.Println("Good evening.")
    }
}

Run Code Online (Sandbox Code Playgroud)

我想知道我在做什么,所以我打开了有关“时间”包的文档。

在做时t := time.Now(),根据文档,我得到一个类型 struct Time ( https://golang.org/pkg/time/#Now ),但是,为了得到我们做的小时t.Hour()。我会理解如果 t 是对象 Time 和 Hour 的一个实例,来自该对象的方法,但这不是 oop,并且 t 是一种类型,我希望像time.Hour(t)获取小时一样调用它。

你能告诉我为什么t.Hour()有效吗?

谢谢!/米格尔

icz*_*cza 7

t不是类型,它是一个变量,它保存了函数time.Time返回的类型的结构值time.Now()

t.Hour()Time.Hour()使用t接收器调用该方法。