Created
October 26, 2017 13:07
-
-
Save timakin/0d969b9a6ad9906d653f6d8990da4567 to your computer and use it in GitHub Desktop.
langToMap.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
) | |
type Language struct { | |
ID int | |
Code string | |
} | |
func MakeMap1(langs []*Language) map[int]string { | |
var m = map[int]string{} | |
for _, l := range langs { | |
m[l.ID] = l.Code | |
} | |
return m | |
} | |
type Langs []*Language | |
func (langs Langs) MakeMap2() map[int]string { | |
var m = map[int]string{} | |
for _, l := range langs { | |
m[l.ID] = l.Code | |
} | |
return m | |
} | |
type Langs2 = []*Language | |
// Fail: invalid receiver type []*Language ([]*Language is an unnamed type) | |
func (langs Langs2) MakeMap3() map[int]string { | |
var m = map[int]string{} | |
for _, l := range langs { | |
m[l.ID] = l.Code | |
} | |
return m | |
} | |
func main() { | |
langs := []*Language{ | |
&Language{ | |
ID: 1, | |
Code: "en", | |
}, | |
&Language{ | |
ID: 2, | |
Code: "ja", | |
}, | |
} | |
m1 := MakeMap1(langs) | |
fmt.Printf("Map 1===============\n") | |
for k, v := range m1 { | |
fmt.Printf("%d:%s\n", k, v) | |
} | |
fmt.Printf("====================\n") | |
ls1 := Langs(langs) | |
m2 := ls1.MakeMap2() | |
fmt.Printf("Map 2===============\n") | |
for k, v := range m2 { | |
fmt.Printf("%d:%s\n", k, v) | |
} | |
fmt.Printf("====================\n") | |
// Fail: langs.MakeMap2 undefined (type []*Language has no field or method MakeMap2) | |
// m3 := langs.MakeMap2() | |
// fmt.Printf("Map 3===============\n") | |
// for k, v := range m3 { | |
// fmt.Printf("%d:%s\n", k, v) | |
// } | |
// fmt.Printf("====================\n") | |
// Fail: langs.MakeMap2 undefined (type []*Language has no field or method MakeMap2) | |
m3 := langs.MakeMap2() | |
fmt.Printf("Map 3===============\n") | |
for k, v := range m3 { | |
fmt.Printf("%d:%s\n", k, v) | |
} | |
fmt.Printf("====================\n") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment