首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不匹配类型*字符串和字符串

不匹配类型*字符串和字符串
EN

Stack Overflow用户
提问于 2015-11-22 08:12:29
回答 3查看 11.3K关注 0票数 1

我试图运行一个条件,基本上查看对象是否为空,但我一直得到(类似的变化)该错误:

代码语言:javascript
复制
invalid operation: release.Name == "" (mismatched types *string and string)

下面是即将消亡的代码:

代码语言:javascript
复制
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 == "",因为错误意味着我得到了另一个错误,这一点我并不真正理解:

代码语言:javascript
复制
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x26fd]

goroutine 1 [running]:

我确信有任何简单的方法可以做到这一点,但我对处理对象/结构不太熟悉。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-22 09:22:21

按照您的代码,您已经声明了var Releasegithub.RepositoryTag,但是您还没有初始化它。

在结构RepositoryTag中,名称声明为*string,这是一个指针;如果是release.Name == "",则尝试进行字符串比较,这是不正确的,因此出现了“不匹配类型*string和string”错误。

如果是“*release.Name ==”,由于还没有初始化版本,因此它在抱怨“无效的内存地址或零指针取消引用”。

您需要做两件事,第一,初始化,发布和第二,检查release.Name =零。

票数 1
EN

Stack Overflow用户

发布于 2015-11-22 08:45:58

从错误消息看,您似乎在尝试将string pointer (*string)与实际的string进行比较。

  • release.Name是一个*string (指向string值的指针)
  • ""是一个string (是一个string值)

它们是两种不同的类型。所以你不能拿它们作比较。

你可能想要做的是release.Name == nil

当一个引用的指针(等于nil)被尝试为时,您将得到第二个错误。所以在你的例子中,*release.Name恐慌,因为实际上release.Namenil

票数 5
EN

Stack Overflow用户

发布于 2015-11-22 08:49:48

代码语言:javascript
复制
var release github.RepositoryTag

您从不为该var分配任何值。这就是为什么*release.Name给出了一个“运行时错误”:release.Name是一个零指针

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33852854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档