2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
從 2022 年 6 月 21 日開始編輯:使用 https://go.dev/play/ 時(shí),腳本似乎不再緩存。每次運(yùn)行時(shí)都會(huì)打印一個(gè)新的 UUID,即使腳本保持不變也是如此。
正如用戶在評(píng)論中指出的那樣,Go Playground中的輸出被緩存。如果在自己的命令行上嘗試此操作,則會(huì)在每次運(yùn)行時(shí)打印一個(gè)新的 UUID。
package main
import (
"fmt"
"github.com/google/uuid"
)
func main() {
id, _ := uuid.NewRandom()
fmt.Println(id)
}
和
$ go run .
604f5ea8-d146-4aac-9a15-4dc33a84eb59
$ go run .
3bc094cf-99c8-4250-98a0-9831fdadedac
$ go run .
b0c13db3-e466-4b5c-a179-e0a16469f11a
就其價(jià)值而言,可以通過更改腳本(例如,添加或修改注釋)使Go playground緩存無效。這將導(dǎo)致生成新的 UUID。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
將問題的再現(xiàn)性放在一邊,因?yàn)槟膯栴}專門與測(cè)試有關(guān),為了完整性,我將添加到現(xiàn)有答案中,該答案也命令緩存結(jié)果 - 即使它并不總是如此(見下文)。我不使用VSCode,所以我無法判斷IDE本身是否執(zhí)行了一些緩存,但請(qǐng)考慮一下,如果您從命令行運(yùn)行單元測(cè)試,并且測(cè)試通過,則第二次運(yùn)行它時(shí),打印的輸出也將是相同的。go testuuid.NewRandom()
特別是,當(dāng)(引用)“它使用顯式包參數(shù)調(diào)用”時(shí),緩存成功結(jié)果。 并且是包參數(shù)。go test./....
因此,如果您有:
func TestUUID(t *testing.T) {
u, err := uuid.NewRandom()
fmt.Println(u)
assert.Nil(t, err)
}
并運(yùn)行:go test -v ./uuidtest/
=>$ go test -v ./uuidtest/
=== RUN TestUUID
b1a912ea-0dd2-4ed6-a5af-00ce106b1017
--- PASS: TestUUID (0.00s)
PASS
ok testproj/uuidtest 0.025s
=>$ go test -v ./uuidtest/
=== RUN TestUUID
b1a912ea-0dd2-4ed6-a5af-00ce106b1017
--- PASS: TestUUID (0.00s)
PASS
ok testproj/uuidtest (cached)
=>$ go test -v ./uuidtest/
=== RUN TestUUID
b1a912ea-0dd2-4ed6-a5af-00ce106b1017
--- PASS: TestUUID (0.00s)
PASS
ok testproj/uuidtest (cached)
順便說一句,終端輸出很好,足以提醒您結(jié)果確實(shí)是 。(cached)
要避免成功緩存,可以將參數(shù)添加到命令調(diào)用中:count=1go test -v ./uuidtest/ -count=1
- 2 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報(bào)