Go中的包选择

Jac*_*001 7 go

我正在尝试编写一个应用程序来从数据库中提取状态,但我似乎陷入了一种非常基本的语言原则.我编写了程序,但由于错误而无法编译use of package time not in selector.

一个非常基本的例子(来自play.golang.org自己的测试环境)

package main

import (
    "fmt"
    "time"
)

func main() {
    s_str := time.Now()
    fmt.Println( printT(s_str) )
}

func printT(t time) time {
    return t.Add(100)
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我发现在线文档和helpdocs有点想要.我的理解是import声明应该包含整个程序的库,就像在C++中一样正确吗?

Den*_*ret 24

您必须使用您在导入中为包提供的名称为导入的类型或变量添加前缀(此处使用默认名称,即"time").这就是你为这个功能所做的,Now但你也必须为这些类型做.

所以类型不是,time而是time.Time(即:Time使用名称导入的包中声明的类型"time").

将您的功能更改为

func printT(t time.Time) time.Time {
    return t.Add(100)
}
Run Code Online (Sandbox Code Playgroud)

对于您的第二个问题:不,该import语句不包括整个程序的库,但仅包含当前文件.

  • @mnagel,gah!不要那样做.使用`.`导入的唯一借口是包测试文件中非常罕见的特殊情况. (4认同)