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

4 回复

你没有使用 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。您尝试过类似这样的方法吗?

来源: stackoverflow.com

标题: 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())`)

你的代码有两个问题:

  1. Format()String() 方法都返回字符串,但你没有接收返回值
  2. 你打印的是原始的 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中会被视为潜在的错误。

回到顶部