我试图运行一个条件,基本上查看对象是否为空,但我一直得到(类似的变化)该错误:
invalid operation: release.Name == "" (mismatched types *string and string)下面是即将消亡的代码:
import (
"github.com/google/go-github/github"
)
func TestLatestTag(user, project string) {
var client *github.Client
client = github.NewClient(nil)
releases, _, err := client.Repositories.ListTags(user, project, nil)
var release github.RepositoryTag
if err != nil {
fmt.Println("Error")
} else {
if release.Name == "" {
fmt.Println("None")
} else {
fmt.Println(releases[0])
}
}
}如果我将If语句更改为*release.Name == "",因为错误意味着我得到了另一个错误,这一点我并不真正理解:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x26fd]
goroutine 1 [running]:我确信有任何简单的方法可以做到这一点,但我对处理对象/结构不太熟悉。
发布于 2015-11-22 09:22:21
按照您的代码,您已经声明了var Releasegithub.RepositoryTag,但是您还没有初始化它。
在结构RepositoryTag中,名称声明为*string,这是一个指针;如果是release.Name == "",则尝试进行字符串比较,这是不正确的,因此出现了“不匹配类型*string和string”错误。
如果是“*release.Name ==”,由于还没有初始化版本,因此它在抱怨“无效的内存地址或零指针取消引用”。
您需要做两件事,第一,初始化,发布和第二,检查release.Name =零。
发布于 2015-11-22 08:45:58
从错误消息看,您似乎在尝试将string pointer (*string)与实际的string进行比较。
release.Name是一个*string (指向string值的指针)""是一个string (是一个string值)它们是两种不同的类型。所以你不能拿它们作比较。
你可能想要做的是release.Name == nil
当一个引用的指针(等于nil)被尝试为时,您将得到第二个错误。所以在你的例子中,*release.Name恐慌,因为实际上release.Name是nil
发布于 2015-11-22 08:49:48
var release github.RepositoryTag您从不为该var分配任何值。这就是为什么*release.Name给出了一个“运行时错误”:release.Name是一个零指针
https://stackoverflow.com/questions/33852854
复制相似问题