এটা সত্য যে ব্যবহারের উপরের উদাহরণগুলোতে const
এবং iota
যান মধ্যে আদিম enums প্রতিনিধিত্বমূলক অধিকাংশ কথ্য উপায় আছে। তবে আপনি যদি জাভা বা পাইথনের মতো অন্য ভাষায় দেখতে চান সেই জাতীয় আরও পুরোপুরি বৈশিষ্ট্যযুক্ত এনাম তৈরির কোনও উপায় অনুসন্ধান করছেন?
পাইথনের স্ট্রিং এনামের মতো দেখতে এবং অনুভব করা শুরু করার মতো কোনও অবজেক্ট তৈরি করার খুব সহজ উপায় হ'ল:
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)
}
মনে করুন আপনিও কিছু ইউটিলিটি পদ্ধতি পছন্দ করতে চাইছিলেন Colors.List()
, এবং Colors.Parse("red")
। এবং আপনার রঙগুলি আরও জটিল ছিল এবং স্ট্রাক্ট হওয়ার দরকার ছিল। তাহলে আপনি কিছুটা এরকম কিছু করতে পারেন:
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())
}
এই মুহুর্তে, নিশ্চিত এটি কার্যকরভাবে কাজ করে তবে আপনি কীভাবে পুনরাবৃত্তিমূলকভাবে রঙ নির্ধারণ করতে হবে তা আপনি পছন্দ করতে পারেন না। যদি আপনি এই মুহুর্তে এটি মুছে ফেলতে চান তবে আপনি নিজের স্ট্রাক্টে ট্যাগ ব্যবহার করতে পারেন এবং এটি সেট আপ করার জন্য কিছু অভিনব প্রতিচ্ছবি করতে পারেন, তবে আশা করি বেশিরভাগ লোককে coverাকতে এটি যথেষ্ট।