Hacker News new | past | comments | ask | show | jobs | submit login

You would never initialize an enum like that, since you would use one of the enumerated values instead. That is, after all, the reason behind defining an enum in the first place. When could you end up with an enum that has an invalid value? When you get the value during runtime and typecast from an int. In that case, though, you should obviously have a runtime check that verifies the value is legal.

Your example case is something that I can't think of a reason to do. It isn't a case where you would need to be careful and knowledgeable to avoid it - there's just no reason to do it. You would use On and Off instead of defining a variable with this type.




This happens all of the time for enums in structs especially during (de)serialization and returning a zero value and an error. func DeserializeState(raw []byte) (State, error) { type Foo struct { State state `json:"state"` Data map[string]string `json:"data"` } f := Foo{} err := json.Unmarshal(&foo, raw) if err != nil { return ???, err }

   }
   s := DeserializeState([]byte(`{"data": {"key": "value"}}`)
   fmt.Println(s) // prints 0 oops


> It isn't a case where you would need to be careful and knowledgeable to avoid it - there's just no reason to do it.

Then why does it compile?




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: