Go中更安全的枚举

03-03 1090阅读 0评论

iota

Go让你用iota来使用枚举。

Go中更安全的枚举,Go中更安全的枚举,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,方法,第1张
(图片来源网络,侵删)
const (
	Guest = iota
	Member
	Moderator
	Admin
)

虽然Go是明确的,但iota似乎相对模糊。如果你以任何其他方式对const组进行排序,你会引入副作用。在上面的例子中,你仅仅对第一个参数Guest赋值了。你可以显式地给每个值分配一个数字来避免这个问题,但这使iota变得过时。

iota对于用位运算定义的参数也很有效。

const (
	Guest = 1 
	fmt.Println("Creating user with role", role)
	return nil
}
func main() {
	err := CreateUser(-1)
	if err != nil {
		fmt.Println(err)
	}
	
	err = CreateUser(42)
	if err != nil {
		fmt.Println(err)
	}
}

	fmt.Println("Creating user with role", role)
	return nil
}
func main () {
	err := CreateUser(0)
	if err != nil {
		fmt.Println(err)
	}
	
    err = CreateUser(role.Role(42))
    if err != nil {
        fmt.Println(err)
    }
}

	if r == role.Unknown {
		return errors.New("no role provided")
	}
	
	fmt.Println("Creating user with role", r)
	
	return nil
}

	fmt.Println(err)
}

	slug string
}
func (r Role) String() string {
	return r.slug
}
var (
	Unknown   = Role{"unknown"}
	Guest     = Role{"guest"}
	Member    = Role{"member"}
	Moderator = Role{"moderator"}
	Admin     = Role{"admin"}
)

	switch s {
	case Guest.slug:
		return Guest, nil
	case Member.slug:
		return Member, nil
	case Moderator.slug:
		return Moderator, nil
	case Admin.slug:
		return Admin, nil
	}
	return Unknown, errors.New("unknown role: " + s)
}
Unknown, Guest, Member, Moderator, Admin}
func (role Role) Valid() bool {
	for _, r := range roleSet {
		if role == r {
			return true
		}
	}
	return false
}

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1090人围观)

还没有评论,来说两句吧...

目录[+]