go - 使用 Go 的 time.Format 时转义数字

标签 go formatting string-formatting

我目前正在尝试获取一个 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)

最佳答案

不,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))
}

关于go - 使用 Go 的 time.Format 时转义数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51312165/

相关文章:

python - 如何在一行中打印出一个字符串和列表-python

python - 替换 % 后跟字符串中的数字

c++ - 限制固定输出的尾随零数

golang 同步/原子包?

go - 预先声明的类型可以在 Go 中实现接口(interface)吗?

c# - 在 LoadDataRow 期间使 DataGridView 中一行中的所有单元格加载为粗体?

Python:无法格式化 SQL 查询字符串

python - 我该如何处理这些弄乱我的打印格式的奇怪特殊字符?

go - 在 golang 编写器中删除连续的空行

regex - 为什么Golang中的这个正则表达式是非贪婪的?