#go
#Вперед
Вопрос:
У меня есть следующая программа:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now().UnixNano() / int64(time.Millisecond)
nowString := string(now)
fmt.Println(nowString)
}
Я ожидаю, что время эпохи будет напечатано в виде строки. Вместо этого я получаю:
�
Как мне исправить эту ошибку?
Комментарии:
1. Преобразование в строку не может быть выполнено с помощью string (сейчас). Совершите экскурсию по Go. Используйте fmt.Sprintf для преобразования чисел в строки или используйте time.Time. Формат.
2. Ответы на большинство основных вопросов даны в рамках экскурсии по Go , которая займет всего несколько минут.
Ответ №1:
main.go
package main
import "fmt"
import "time"
func main() {
nanos := time.Now().UnixNano()
fmt.Println(time.Unix(0, nanos))
millis := nanos / 1000000
fmt.Println(millis)
}
Ответ №2:
Вы выполняете много вычислений, которые не нужны, если вы используете time
функции, как показано здесь на примере — https://gobyexample.com/time-formatting-parsing
Также. если все, что вам нужно сделать, это напечатать целое число, вам не нужно преобразовывать его в строку, а просто использовать спецификатор формата, например:
func main() {
now := time.Now().UnixNano() / int64(time.Millisecond)
//now is an int64 as you may have observed
fmt.Printf("%d", now)
//or even fmt.Println(now)
}
Ответ №3:
Взгляните на strconv.
Пакет strconv реализует преобразования в строковые представления базовых типов данных и из них.
В вашем случае для преобразования числа int64 в строку может потребоваться использовать FormatInt, как показано ниже:
функция FormatInt (i int64, базовый int) string
FormatInt возвращает строковое представление i в заданной базе, для 2 <= base <= 36. В результате используются строчные буквы от ‘a’ до ‘z’ для цифровых значений > = 10.
convertedString := strconv.FormatInt(YOUR_NUMBER, 10)
И вот пример эпохи (https://gobyexample.com/epoch ), используя пакет time:
func main() {
now := time.Now()
secs := now.Unix()
nanos := now.UnixNano()
fmt.Println(now)
millis := nanos / 1000000
fmt.Println(secs)
fmt.Println(millis)
fmt.Println(nanos)
fmt.Println(time.Unix(secs, 0))
fmt.Println(time.Unix(0, nanos))
}
вывод:
$ go run epoch.go
2012-10-31 16:13:58.292387 0000 UTC
1351700038
1351700038292
1351700038292387000
2012-10-31 16:13:58 0000 UTC
2012-10-31 16:13:58.292387 0000 UTC