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条)

报告相同问题?