首页 > 解决方案 > 在 cunston 类型中使用 interator 属性

问题描述

我正在编写 Go 代码,其中我使用基本映射 [string] int 创建了一个类型,我需要创建一个返回映射、反转键和值的方法。我开始编写代码,但我无法迭代我创建的类型。

到目前为止,我已经制作了以下代码:

package constants

type Month map[string]int;

// LongMonth is a relationship with string and date value (int)
var LongMonth = Month{
    "Janary":1,
    "February":2,
    "March":3,
    "April":4, 
    "May":5,
    "June": 6,
    "July": 7,
    "August": 8,
    "September": 9,
    "Octuber": 10,
    "Novenber": 11,
    "Decenber": 12,
}

// ShortMonth is a relationship with a resume string and date value (int)
var ShortMonth = Month{
    "Jan":1,
    "Feb":2,
    "Mar":3,
    "Apr":4, 
    "May":5,
    "Jun": 6,
    "Jul": 7,
    "Aug": 8,
    "Sep": 9,
    "Oct": 10,
    "Nov": 11,
    "Dec": 12,
}

func (m* Month) Reverse() map[int]string {
    n:=make(map[int]string);
    for k, v := range m {
        n[v] = k
    }
    return n
};
// LongMonthReverse is a relationship with string and date value (int)
// var LongMonthReverse = reverseMonth(LongMonth);
// ShortMonthReverse is a relationship with string and date value (int)
// var ShortMonthReverse = reverseMonth(ShortMonth);

我需要函数 Reverse 返回反向 emonth。例如:month = {"Jan": 1..."Dec": 12} 和 month.Reverse() 返回 {1:"Jan"....12:"Dec"}

标签: dictionarygoiteratorreversegolang-migrate

解决方案


您不能迭代指针,要么更改 to 的方法接口,func (m* Month) Reverse() map[int]string要么func (m Month) Reverse() map[int]string需要*mReverse()

package main

import "fmt"


type Month map[string]int

// LongMonth is a relationship with string and date value (int)
var LongMonth = Month{
    "Janary":1,
    "February":2,
    "March":3,
    "April":4,
    "May":5,
    "June": 6,
    "July": 7,
    "August": 8,
    "September": 9,
    "Octuber": 10,
    "Novenber": 11,
    "Decenber": 12,
}

// ShortMonth is a relationship with a resume string and date value (int)
var ShortMonth = Month{
    "Jan":1,
    "Feb":2,
    "Mar":3,
    "Apr":4,
    "May":5,
    "Jun": 6,
    "Jul": 7,
    "Aug": 8,
    "Sep": 9,
    "Oct": 10,
    "Nov": 11,
    "Dec": 12,
}

func (m* Month) Reverse() map[int]string {
    n:=make(map[int]string)
    // this is the fix
    for k, v := range *m {
        n[v] = k
    }
    return n
}


func main() {
  fmt.Println(ShortMonth.Reverse())
}

推荐阅读