Skip to content

Instantly share code, notes, and snippets.

@timakin
Created October 26, 2017 13:07
Show Gist options
  • Save timakin/0d969b9a6ad9906d653f6d8990da4567 to your computer and use it in GitHub Desktop.
Save timakin/0d969b9a6ad9906d653f6d8990da4567 to your computer and use it in GitHub Desktop.
langToMap.go
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