不匹配的类型 *string 和 string
mismatched types *string and string
我正在尝试 运行 一个条件来基本上查看对象是否为空,但我不断收到(类似的变化)此错误:
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]:
我确定有任何简单的方法可以做到这一点,但我对处理不是很熟悉objects/structs
从错误消息来看,您似乎正在尝试将 string pointer
(*string
) 与实际的 string
进行比较。
release.Name
是一个 *string
(指向 string
值的指针)
""
是一个 string
(是一个 string
值)
它们是两种不同的类型。所以你不能比较它们。
您可能想要做的是 release.Name == nil
当一个指针 引用 没有(等于 nil
)试图被 取消引用 你得到第二个错误。所以在你的情况下 *release.Name
恐慌因为事实上 release.Name
是 nil
var release github.RepositoryTag
您永远不会为该变量分配任何值。这就是为什么 *release.Name
给你一个 "runtime error": release.Name
是一个 nil 指针
根据您的代码,您已声明 var release github.RepositoryTag,但尚未对其进行初始化。
在结构 RepositoryTag 中,Name 被声明为 *string,它是一个指针,在 release.Name == "" 的情况下,尝试进行字符串比较,这是不正确的,因此 "mismatched types *string and string" 错误。
在 *release.Name == "" 的情况下,由于发布尚未初始化,它正在抱怨 "invalid memory address or nil pointer dereference"
你需要做两件事,第一个初始化,释放第二个,检查release.Name = nil。
我正在尝试 运行 一个条件来基本上查看对象是否为空,但我不断收到(类似的变化)此错误:
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]:
我确定有任何简单的方法可以做到这一点,但我对处理不是很熟悉objects/structs
从错误消息来看,您似乎正在尝试将 string pointer
(*string
) 与实际的 string
进行比较。
release.Name
是一个*string
(指向string
值的指针)""
是一个string
(是一个string
值)
它们是两种不同的类型。所以你不能比较它们。
您可能想要做的是 release.Name == nil
当一个指针 引用 没有(等于 nil
)试图被 取消引用 你得到第二个错误。所以在你的情况下 *release.Name
恐慌因为事实上 release.Name
是 nil
var release github.RepositoryTag
您永远不会为该变量分配任何值。这就是为什么 *release.Name
给你一个 "runtime error": release.Name
是一个 nil 指针
根据您的代码,您已声明 var release github.RepositoryTag,但尚未对其进行初始化。
在结构 RepositoryTag 中,Name 被声明为 *string,它是一个指针,在 release.Name == "" 的情况下,尝试进行字符串比较,这是不正确的,因此 "mismatched types *string and string" 错误。
在 *release.Name == "" 的情况下,由于发布尚未初始化,它正在抱怨 "invalid memory address or nil pointer dereference"
你需要做两件事,第一个初始化,释放第二个,检查release.Name = nil。