Golang中time.Time转换为字符串时出现"result of (time.Time).String call not used"问题
Golang中time.Time转换为字符串时出现"result of (time.Time).String call not used"问题 我想将昨天日期转换为字符串 ‘2022-04-11’ 以便在 SQL 查询中使用,但遇到了错误:
未使用 (time.Time).String 的调用结果
package main
import (
"fmt"
"time"
)
func main() {
date := time.Now().Add(-24 * time.Hour)
date.Format("2006-01-02")
date.String()
fmt.Println(date)
}
我哪里做错了?
更多关于Golang中time.Time转换为字符串时出现"result of (time.Time).String call not used"问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
你没有使用 date.String() 的结果。
这个方法不会原地改变 date 的类型,而是创建一个你可以使用的字符串。
不过 fmt.Println() 无论如何都会调用 String() 方法,因此你不需要手动调用它。
另外 Format() 也不会让 date 记住请求的格式,它只会返回格式化后的字符串。
所以你实际想做的可能是这样:
package main
import (
"fmt"
"time"
)
func main() {
date := time.Now().Add(-24 * time.Hour)
fmt.Println(date.Format("2006-01-02"))
}
更多关于Golang中time.Time转换为字符串时出现"result of (time.Time).String call not used"问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
NobbZ:
那么,你实际想做的可能是这样:
我想要一个可以在 SQL 查询中使用的字符串形式的日期。这是一个简化但无效的伪代码 🙂
这个例子用字符串可以工作,但用日期格式就不行。
func main() {
date := time.Now().Add(-24 * time.Hour)
date = date.Format("2006-01-02")
query := "SELECT * FROM users WHERE usr_edit = $1"
db.Query (query, date) <--------------date as "string"?
}
您应该能够在SQL查询中直接使用日期。这看起来像是PostgreSQL。您尝试过类似这样的方法吗?
标题: PostgreSQL: Selecting a DateTime that matches a whole day
标签: sql, postgresql
在您的情况下,代码看起来会更像这样:
date := time.Now().Add(-24 * time.Hour)
rows, err := db.Query (`SELECT * FROM users
WHERE date_trunc('day', $1) = date_trunc('day', usr_edit)`, date)
或者类似这样的代码。不过,由于这涉及到全表扫描,效率不是特别高。我通常更喜欢使用 BETWEEN 方法。但这应该能让您开始。另外,您真的需要传入一个 time.Time 吗?您可以只用SQL来实现:
rows, err := db.Query (`SELECT * FROM users
WHERE date_trunc('day', now() - interval '1 day') = date_trunc('day', usr_edit)`)
……如果您想采用 BETWEEN 方法来避免全表扫描:
rows, err := db.Query (`
SELECT * FROM users
WHERE usr_edit
BETWEEN date_trunc('day', now() - interval '1 day')
AND date_trunc('day', now())`)
你的代码有两个问题:
Format()和String()方法都返回字符串,但你没有接收返回值- 你打印的是原始的
date变量,而不是格式化后的字符串
正确做法:
package main
import (
"fmt"
"time"
)
func main() {
date := time.Now().Add(-24 * time.Hour)
// 方法1:使用Format获取格式化字符串
dateStr := date.Format("2006-01-02")
fmt.Println(dateStr) // 输出: 2022-04-11
// 方法2:直接使用String()方法(但格式固定)
dateString := date.String()
fmt.Println(dateString) // 输出: 2022-04-11 15:04:05.999999999 +0800 CST
// 对于SQL查询,推荐使用Format方法
query := fmt.Sprintf("SELECT * FROM table WHERE date = '%s'", dateStr)
fmt.Println(query)
}
或者更简洁的写法:
package main
import (
"fmt"
"time"
)
func main() {
yesterday := time.Now().Add(-24 * time.Hour).Format("2006-01-02")
fmt.Println(yesterday) // 输出: 2022-04-11
}
错误信息"result of (time.Time).String call not used"是因为你调用了String()方法但没有使用它的返回值,这在Go中会被视为潜在的错误。

