Экранирование чисел при использовании времени Go. Формат

Я сейчас пытаюсь взять time.Time возьмите объект и иди и сгенерируйте отформатированную строку, которая содержит некоторые числа, которые я НЕ хочу анализировать как время. Например, рассмотрим следующую программу:

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    msg := now.Format("Encountered a 502 error on 2006-01-02 15:02 MST") 
    fmt.Println(msg)
}

К сожалению, текст "502" здесь интерпретируется как время: выполнение этого кода приведет к выводу наподобие Encountered a 1112 error on 2018-07-12 9:12 UTC,

Есть ли способ избежать 502 чисел, чтобы они не интерпретировались как числа? Например, похоже на то, как вы можете избежать % метасимвол с помощью %% в языках, которые реализуют логику форматирования в стиле strftime?

Или мой единственный вариант просто разделить это и использовать две операции форматирования вместо одной?

nowString := now.Format("2006-01-02 15:02 MST")
msg := fmt.Sprintf("Encountered 502 error on %s", nowString)

1 ответ

Решение

Нет, для номеров нет выхода time.Format, Цель этого метода - для форматирования времени, а не для форматирования строк в целом.

Если это используется из нескольких мест, обычным решением будет сделать простую функцию для форматирования

func nowMessage(msg string) string {
    const layout = "2006-01-02 15:02 MST"
    return fmt.Sprintf("%s %s", msg, time.Now().Format(layout))
}
Другие вопросы по тегам