这是一个基本的go程序
package main
import (
"fmt"
"time"
)
type myTime time.Time
func main() {
my := myTime(time.Now())
fmt.Println(my)
normal := time.Now()
fmt.Println(normal)
}
和相应的输出
{63547112172 291468455 0x545980}
2014-09-23 23:36:12.292132305 +0000 UTC
我想知道为什么myTime打印时间比time.Time要差。它们基本上应该来自同一类型...另外,如果我尝试访问任何时间方法。时间,让我们说,天,它可用于"正常&#34 ;但不适合"我的#34;。
谢谢!
答案 0 :(得分:2)
您的新类型不会继承time.Time
中的方法。 To quote the spec:
声明的类型不会继承绑定到现有类型的任何方法
由于没有String
方法,因此不会打印有意义的值。你需要自己实现它。
您的另一个选择是将time.Time
嵌入您自己的类型中。这样您就可以包含time.Time
的功能,但也可以添加自己的功能。
游乐场链接:http://play.golang.org/p/PY6LIBoP6H
type myTime struct {
time.Time
}
func (t myTime) String() string {
return "<Custom format here>"
}
func main() {
my := myTime{time.Now()}
fmt.Println(my)
normal := time.Now()
fmt.Println(normal)
}
答案 1 :(得分:0)
fmt.Println
使用String()
方法(或者更确切地说是fmt.Stringer
interface)。使用基础类型创建新类型时(在您的情况下为time.Time
):
type myTime time.Time
您不会继承基础类型的方法集。因此,myTime
没有String()
方法,因此fmt将使用结构的默认格式。