After reading about composite types and seeing the err of my question and thought in general, and to answer my own question, it seems that if I want compile time errors and the general style that might come about with polymorphism, I should make use of duck-typing, creating an interface for each type appropriately with the necessary required methods to accommodate.
While this was my original thought, I couldn't help but thing how elegant it would have been (since the result is a string) to simply have
type ActionType string
type ActionStart ActionType
type ActionFn func(string) ActionType
and then go about defining custom actions such as
var myActionStart ActionStart = "start"
func myActionFn(s string) ActionType {
switch s {
case whatever:
return myActionStart
}
}
of which there's more then just ActionStart, and such a type determines placement of string. Though this is an abuse of thought to the definition of a type, so sing duck typing I could resolve, but would need to write a bit more code. Perhaps I'll explore some other possibilities with Go as well.