使用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
相关产品推荐
相关产品推荐

