dongmei8760 2018-04-10 22:11
浏览 50
已采纳

无效的操作:currency.Name()==货币(字符串和* config.Currency类型不匹配)

I have a function that takes in a string, and checks to see if that string is present in a list of other strings. Simple enough.

func (s *Foo) validateCurrency(currency string) error {
    for _, currency := range s.Config.Currencies {
        if currency.Name() == currency {
            return nil
        }
    }
    return ErrCurrencyNotFound
}

This is the Currency struct:

type Currency struct {
    name    string
    // ...
}

func (c *Currency) Name() string {
    return c.name
}

Yet I seem to be getting this error:

invalid operation: currency.Name() == currency (mismatched types string and *config.Currency)

Why on earth is the Go compiler yelling at me? I don't get it... both are strings. currency.Name() returns a string. Why does the error say it returns a *config.Currency?

  • 写回答

2条回答 默认 最新

  • douyuan1752 2018-04-10 22:20
    关注

    You're shadowing currency in the for loop. Look at this code for a simpler example: https://play.golang.org/p/UFmwqQ4JZtG

    First assignment to currency -> func (s *Foo) validateCurrency(currency string) error {

    Second assignment which shadows the first: -> for _, currency := range s.Config.Currencies {

    Change one of those variable names for a fix.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 咨询一下有关于王者荣耀赢藏战绩
  • ¥100 求购一套带接口实现实习自动签到打卡
  • ¥50 MacOS 使用虚拟机安装k8s
  • ¥500 亚马逊 COOKIE我如何才能实现 登录一个亚马逊账户 下发新 COOKIE ..我使用下发新COOKIE 导入ADS 指纹浏览器登录,我把账户密码 修改过后,原来下发新COOKIE 不会失效的方式
  • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
  • ¥25 oracle中的正则匹配
  • ¥15 关于#vscode#的问题:把软件卸载不会再出现蓝屏
  • ¥15 vimplus出现的错误
  • ¥15 usb无线网卡转typec口
  • ¥30 怎么使用AVL fire ESE软件自带的优化模式来优化设计Soot和NOx?