C言語のenum的なことをする

golangでiotaを使うと、0から順に数字を入れてくれます。iotaのカウントはグループ単位なので、')'を抜けたあとは再び0にリセットされます。加えて、"cont ( identifier Type = iota.."とすると、typeが付くようです。それを以下のコードで確認してみました。

package main
import "fmt"
type Number int
const (
 zero = iota
 one
 two
 three
)
const (
 ZERO Number = iota
 ONE
 TWO
 THREE
)

func p(n interface{}) {
  switch n.(type) {
  default:
        fmt.Printf("int:%d\n", n)
  case Number:
        fmt.Printf("Number:%d\n", n)

  }
}

func main() {
        p(three)//=> "int:3\n"
        p(TWO)//=> "Number:2\n"
}