【问题标题】:Unexpected output when printing time.Time [duplicate]打印 time.Time 时出现意外输出 [重复]
【发布时间】:2019-08-27 15:01:00
【问题描述】:

“我正在尝试输出一个 channel 的值,它从一个结构中接收值,它应该是一个字符串和时间。它输出这两个,但是它包括这个奇怪的行” +0300 +03 m= +0.001997101" 在时间之后。"

从 fmt 包中尝试了许多其他的东西,但仍然没有帮助。也尝试了时间包中的东西

package main

import (
    "fmt"
    "os"
    "os/signal"
    "sync"
    "syscall"
    "time"
)

var wg sync.WaitGroup

type widget struct {
    Label string
    Time  time.Time
}

func main() {
    c := make(chan widget)
    sc := make(chan os.Signal, 1)
    done := make(chan bool, 1)

    signal.Notify(sc, syscall.SIGINT,
            syscall.SIGTERM,
        syscall.SIGHUP,
        syscall.SIGKILL,
        syscall.SIGSEGV,
    )

    go func() {
            sig := <-sc
        fmt.Println()
        fmt.Println(sig)
        done <- true
    }()

    go send(c)
    go receive(c)
    <-done
    fmt.Println("Program exited")

}

func send(p chan<- widget) {
    producer := widget{
            "widget_id_34",
        time.Now(),
    }
    p <- producer
}
//where im grtting the problem from i beilieve
func receive(c <-chan widget) {
    out := <-c
    fmt.Printf("%v", out)
    //fmt.Fprintln(os.Stdout, <-c)
}

【问题讨论】:

  • [widget_1 20:27:38.482204] 我的答案应该是这样的,我不确定我做错了什么
  • "从 fmt 包中尝试了许多其他的东西," 对于时间,显而易见的地方是 package time..的文档。

标签: go time


【解决方案1】:

m 字段是monotonic time。根据文档:

去除单调时钟读数的规范方法是使用t = t.Round(0)

这样做会产生一个没有m 值的时间。 +0300 是时区偏移量,它是时间值的一部分(没有它,时间值将毫无用处,因为它会有 +/- 23 小时的误差范围)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2022-01-10
    • 2020-09-22
    • 2020-07-20
    • 2017-02-09
    • 1970-01-01
    相关资源
    最近更新 更多