You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用go-github无法正确获取GitHub仓库标签名称的问题

问题:使用go-github获取GitHub仓库标签时输出十六进制地址而非标签名称

我编写了一段Go代码,用于从hashicorp/terraform仓库获取标签,代码如下:

import (
    "github.com/google/go-github/v48/github"
    "context"
    "fmt" // 原代码遗漏该导入
)

func main() { 
    client := github.NewClient(nil)
    tags, _, err := client.Repositories.ListTags(context.Background(), "hashicorp", "terraform", nil)
    // 原代码忽略错误,建议补充处理逻辑
    if err != nil {
        fmt.Printf("获取标签失败: %v\n", err)
        return
    }
    
    if len(tags) > 0 {
        latestTag := tags[0]
        fmt.Println(latestTag.Name) // 此处输出指针内存地址
    } else {
        fmt.Printf("No tags yet")
    }
}

运行这段代码后,返回了一个奇怪的十六进制值:0x1400035c4a0,而我期望得到的是:v1.4.0-alpha20221207。

我已确认直接发送GET请求https://api.github.com/repos/hashicorp/terraform/tags能正确返回标签,说明API本身无问题。


解决方案

问题根源在于go-github库的结构体字段设计:Tag结构体中的Name字段是指针类型(*string),直接打印指针变量会输出它的内存地址,而非实际字符串值。

修正方法是对指针进行解引用获取实际内容,同时建议增加空指针检查避免panic:

import (
    "github.com/google/go-github/v48/github"
    "context"
    "fmt"
)

func main() { 
    client := github.NewClient(nil)
    tags, _, err := client.Repositories.ListTags(context.Background(), "hashicorp", "terraform", nil)
    if err != nil {
        fmt.Printf("获取标签失败: %v\n", err)
        return
    }
    
    if len(tags) > 0 {
        latestTag := tags[0]
        if latestTag.Name != nil {
            fmt.Println(*latestTag.Name) // 解引用指针获取实际标签名
        } else {
            fmt.Println("标签名称为空")
        }
    } else {
        fmt.Println("暂无标签")
    }
}

另外,原代码遗漏了fmt包的导入,并且忽略了ListTags返回的错误,补充这些细节可避免潜在问题。


内容的提问来源于stack exchange,提问作者gopherhidden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:30:42