Yukarıdaki örneklerin const
ve iota
Go'daki ilkel sıralamaları temsil etmenin en deyimsel yolları olduğu doğrudur . Peki, Java veya Python gibi başka bir dilde göreceğiniz türe benzer daha tam özellikli bir numaralandırma oluşturmak için bir yol arıyorsanız?
Python'da dize sıralaması gibi görünmeye ve hissetmeye başlayan bir nesne oluşturmanın çok basit bir yolu:
package main
import (
"fmt"
)
var Colors = newColorRegistry()
func newColorRegistry() *colorRegistry {
return &colorRegistry{
Red: "red",
Green: "green",
Blue: "blue",
}
}
type colorRegistry struct {
Red string
Green string
Blue string
}
func main() {
fmt.Println(Colors.Red)
}
Ayrıca Colors.List()
, veColors.Parse("red")
. Ve renkleriniz daha karmaşıktı ve bir yapı olması gerekiyordu. O zaman böyle bir şey yapabilirsiniz:
package main
import (
"errors"
"fmt"
)
var Colors = newColorRegistry()
type Color struct {
StringRepresentation string
Hex string
}
func (c *Color) String() string {
return c.StringRepresentation
}
func newColorRegistry() *colorRegistry {
red := &Color{"red", "F00"}
green := &Color{"green", "0F0"}
blue := &Color{"blue", "00F"}
return &colorRegistry{
Red: red,
Green: green,
Blue: blue,
colors: []*Color{red, green, blue},
}
}
type colorRegistry struct {
Red *Color
Green *Color
Blue *Color
colors []*Color
}
func (c *colorRegistry) List() []*Color {
return c.colors
}
func (c *colorRegistry) Parse(s string) (*Color, error) {
for _, color := range c.List() {
if color.String() == s {
return color, nil
}
}
return nil, errors.New("couldn't find it")
}
func main() {
fmt.Printf("%s\n", Colors.List())
}
Bu noktada, işe yaradığından emin olun, ancak renkleri tekrar tekrar nasıl tanımlamanız gerektiğinden hoşlanmayabilirsiniz. Bu noktada bunu ortadan kaldırmak isterseniz, yapınızdaki etiketleri kullanabilir ve ayarlamak için süslü bir yansıma yapabilirsiniz, ancak umarım bu çoğu insanı kapsamak için yeterlidir.