【问题标题】:Package selection in GoGo 中的包选择
【发布时间】:2013-09-18 08:35:06
【问题描述】:

我正在尝试编写一个应用程序来从数据库中提取状态,但我似乎陷入了语言的一个非常基本的原则。我已经编写了程序,但由于错误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)
}

不幸的是,我发现在线文档和帮助文档有点缺乏。我的理解是import 语句应该包括整个程序的库,就像在 C++ 中一样,对吗?

【问题讨论】:

    标签: go


    【解决方案1】:

    您必须在导入的类型或变量前加上您在导入中为包指定的名称(这里使用默认名称,即“时间”)。这就是您为函数 Now 所做的,但您也必须为类型执行此操作。

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

    把你的函数改成

    func printT(t time.Time) time.Time {
        return t.Add(100)
    }
    

    对于第二个问题:不,import 语句不包含整个程序的库,而仅包含当前文件。

    【讨论】:

    • 我可能会为此把头撞到墙上...谢谢。我会尽快接受。
    • 您应该提交一个错误以改进错误消息。我会,但我现在在移动设备上。
    • 您可以使用点 (stackoverflow.com/q/6478962/2536029) 导入,但您仍然必须使用大写字母 Time
    • @mnagel,啊!不要那样做。使用 . 导入的唯一借口是包的测试文件中非常罕见的特殊情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2023-03-18
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多