Golang Telemetry - 如何解决无法找到相关数据的问题

Golang Telemetry - 如何解决无法找到相关数据的问题 大家好,

我已启用 Go 遥测功能,并且我的 Go 应用程序已经运行了一周,但我没有在 C:/Users/User_name/AppData/RoamingC:/Users/<User>/go/telemetry 目录中看到任何生成的遥测数据。除了启用遥测之外,是否还需要其他操作,或者我找错了位置?

谢谢!

1 回复

更多关于Golang Telemetry - 如何解决无法找到相关数据的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 Go 1.21+ 中,遥测数据默认存储在操作系统特定的目录中。对于 Windows 系统,正确的路径是:

// 默认存储位置示例
C:\Users\<username>\AppData\Local\go\telemetry

检查以下步骤来确认和解决问题:

1. 验证遥测是否已启用:

go env GOVERSION
# 确保版本 >= 1.21

go env GOTELEMETRY
# 应返回 "on" 或 "1"

2. 检查正确的存储目录:

// 通过代码验证存储位置
package main

import (
    "fmt"
    "os"
    "path/filepath"
    "runtime"
)

func main() {
    var telemetryDir string
    
    switch runtime.GOOS {
    case "windows":
        telemetryDir = filepath.Join(os.Getenv("LOCALAPPDATA"), "go", "telemetry")
    case "darwin":
        telemetryDir = filepath.Join(os.Getenv("HOME"), "Library", "Caches", "go", "telemetry")
    case "linux":
        telemetryDir = filepath.Join(os.Getenv("HOME"), ".cache", "go", "telemetry")
    }
    
    fmt.Printf("遥测目录: %s\n", telemetryDir)
    
    // 检查目录是否存在
    if _, err := os.Stat(telemetryDir); os.IsNotExist(err) {
        fmt.Println("遥测目录不存在")
    } else {
        // 列出文件
        files, _ := os.ReadDir(telemetryDir)
        fmt.Printf("找到 %d 个遥测文件:\n", len(files))
        for _, f := range files {
            fmt.Printf("  - %s\n", f.Name())
        }
    }
}

3. 强制生成遥测数据:

# 运行会触发遥测的命令
go version
go list -m all
go build ./...

4. 检查遥测配置:

# 查看所有相关环境变量
go env | findstr TELEMETRY

5. 手动检查文件:

# Windows PowerShell
Get-ChildItem -Path $env:LOCALAPPDATA\go\telemetry -Force -ErrorAction SilentlyContinue

# 或使用 dir 命令
dir %LOCALAPPDATA%\go\telemetry /a

如果仍然没有数据,可能是由于:

  • 遥测数据上传后被自动删除(默认行为)
  • 网络策略阻止遥测上传
  • 文件系统权限问题

可以通过设置环境变量保留本地副本:

set GOTELEMETRY=local
go version  # 这会生成并保留本地遥测文件

然后检查 %LOCALAPPDATA%\go\telemetry\local 目录。

回到顶部