将映射定义为常量是不可能的。但是您可以声明一个全局变量,它是一个包含map的结构
var romanNumeralDict = struct { m map[int]string}{m: map[int]string { 1000: "M", 900: "CM", //YOUR VALUES HERE}}func main() { d := 1000 fmt.Printf("Value of Key (%d): %s", d, romanNumeralDict.m[1000])} 也可以使用闭包函数
package mainimport ( "fmt")// http://stackoverflow.com/a/27457144/10278func romanNumeralDict() func(int) string { // innerMap is captured in the closure returned below innerMap := map[int]string{ 1000: "M", 900: "CM", 500: "D", 400: "CD", 100: "C", 90: "XC", 50: "L", 40: "XL", 10: "X", 9: "IX", 5: "V", 4: "IV", 1: "I", } return func(key int) string { return innerMap[key] }}func main() { fmt.Println(romanNumeralDict()(10)) fmt.Println(romanNumeralDict()(100)) dict := romanNumeralDict() fmt.Println(dict(400))}
也可以使用一般函数
// romanNumeralDict returns map[int]string dictionary, since the return // value is always the same it gives the pseudo-constant output, which // can be referred to in the same map-alike fashion. var romanNumeralDict = func() map[int]string { return map[int]string { 1000: "M", 900: "CM", 500: "D", 400: "CD", 100: "C", 90: "XC", 50: "L", 40: "XL", 10: "X", 9: "IX", 5: "V", 4: "IV", 1: "I", } } func printRoman(key int) { fmt.Println(romanNumeralDict()[key]) } func printKeyN(key, n int) { fmt.Println(strings.Repeat(romanNumeralDict()[key], n)) } func main() { printRoman(1000) printRoman(50) printKeyN(10, 3) }
发表评论 取消回复