golang没有提供枚举支持,但是枚举在一些业务场景中却是十分重要的。举个简单的例子:发表帖子,需要对帖子做一些校验。这时我们可能就需要定义一些异常变量,这些常量自然是维护在枚举中语意更强,使用更加灵活。下面我简单介绍一下threeperson异常枚举实现思路。
#### iota 给const绑定序列值
-----------------
````
type ErrorCode int
const (
INTERNAL_ERROR ErrorCode = 1 + iota
NOT_LOGIN
NOT_EXIST_ARTICLE_ERROR
ARTICLE_TITLE_LEN_OVERFLOW
ARTICLE_CATEGORY_LEN_OVERFLOW
ARTICLE_TAG_LEN_OVERFLOW
ARTICLE_CONTENT_LEN_OVERFLOW
)
`````
这里定义了一些异常常量,通过iota使常量值自增1.
#### 定义ErrorModel,初始化一个异常modle数组
----------------
```
type ErrorModel struct {
Code int
Message string
}
var errorCodes = [...]ErrorModel{
ErrorModel{Code:-1, Message:"系统内部错误"},
ErrorModel{Code:1000, Message:"未登录"},
ErrorModel{Code:1001, Message:"文章不存在"},
ErrorModel{Code:1002, Message:"文章标题太长"},
ErrorModel{Code:1003, Message:"文章分类太长"},
ErrorModel{Code:1004, Message:"文章标题太长"},
ErrorModel{Code:1005, Message:"文章内容太长"},
}
```
#### 给ErrorCode 绑定函数,并实现error 接口
------------------------
```
func (c ErrorCode) Code() int {
return errorCodes[c - 1].Code
}
func (c ErrorCode) Error() string {
return errorCodes[c - 1].Message
}
```
这里实现了Error 接口,ErrorCode 就变成了error 实现,使用时就可以面向接口去编程
#### 使用实例
---------------------
```
func ValidArticle(a entities.Article) (error, bool) {
var title = a.Title
var category = a.Categories;
var tag = a.Tags;
var content = a.Content
var titleMaxLen = ParameterIntValue("article_title_max_length")
var categoryMaxLen = ParameterIntValue("article_categories_max_length")
var tagMaxLen = ParameterIntValue("article_tags_max_length")
var contentMaxLen = ParameterIntValue("article_content_max_length")
if len(title) > titleMaxLen {
return exception.ARTICLE_TITLE_LEN_OVERFLOW, false
}
if len(category) > categoryMaxLen {
return exception.ARTICLE_CATEGORY_LEN_OVERFLOW, false
}
if len(tag) > tagMaxLen {
return exception.ARTICLE_TAG_LEN_OVERFLOW, false
}
if len(content) > contentMaxLen {
return exception.ARTICLE_CONTENT_LEN_OVERFLOW, false
}
return nil, true
}
```
这是一个文章内容长度校验函数,异常常量维护在enum error中,用起来是不是很方便。
但是如果异常枚举列表位置需要调换,就很蛋疼了。
相关推荐
Go语言,也称为Golang,是由Google公司开发的一种静态类型、编译型、并发型、垃圾回收的现代编程语言,其设计目标是提高开发效率、运行速度以及网络程序的可移植性。以下是对Go语言主要特性和编程概念的详细说明: ...
3. 错误处理:Go语言使用error而非异常处理机制,这在某些情况下可能较为繁琐。 在Go语言中,程序从main函数开始执行。例如: ```go package main import "fmt" func main() { fmt.Println("Hello Go") } ``` ...
总的来说,"status_off"这个项目可能是用来处理状态管理的Golang库,使用了Golang的枚举、结构体和错误处理等特性。通过`go get`命令获取和更新源代码,结合`go mod`进行依赖管理,使得开发和维护更加便捷。如果你...
Read(p []byte) (n int, err error) } ``` 5. **变量命名**:遵循驼峰命名法,根据访问控制决定首字母大小写。特殊名词处理: - 私有变量,特有名词为首个单词,小写,如`apiClient`。 - 其他情况,保留原有...
Golang采用`error`接口进行错误处理,通常函数返回值的最后一个元素是`error`类型。理解如何正确处理和报告错误是编写可靠程序的关键。 七、环境变量 `os.Getenv`和`os.Setenv`分别用于获取和设置环境变量,这对于...
Golang没有内置的枚举类型,但可以通过常量组合来模拟枚举。通常会创建一个常量组,并将它们与自定义类型关联,以实现枚举的效果: ```go type Color int const ( Red Color = iota Green Blue ) ``` 5. ...
Go语言(又称Golang)是一种静态类型的编程语言,由Google工程师Robert Griesemer、Rob Pike及Ken Thompson在2007年开始设计并开发,于2009年正式发布。它被设计成一种简洁、高效且易于学习的语言,旨在解决现代软件...
"用goland编写的" 提示我们这个工具是使用Golang(Go语言)开发的,Go是一种静态类型的、编译型的、并发型的语言,尤其适合构建网络服务和系统工具。"用于枚举目录的简单工具" 指出dir-enum的主要功能是对目录进行...
Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。本课程将引导你从入门到精通,深入理解Go语言的各项特性和常用技术。 **初识篇** 1. **环境安装**:首先...
Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的编程语言。Go语言的设计目标是提高开发效率、系统性能和代码可读性,特别适合构建大规模的网络服务和分布式系统。下面将根据...
Go语言,又称为Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言,旨在提高编程效率,简化系统级和网络编程。 Goest 3.6原版源码的分析和学习可以帮助我们深入了解Go语言的特性...
- **枚举类型**: Go 语言本身没有枚举类型,但可以通过常量和类型别名来模拟枚举。 ### 2. 表达式与控制流 #### 2.1 保留字 - Go 语言有一些保留字,如 `func`, `if`, `for`, `import` 等,这些关键字不能用作...
Go语言,又称Golang,是Google推出的一种静态类型的编译型编程语言,旨在提高开发者的生产力和代码的可维护性。Go语言以其简洁的语法、内置并发支持、高效的性能以及丰富的标准库,受到了许多开发者的喜爱,尤其是在...
- **解决方案**:使用枚举实现单例模式,或采用静态内部类的方式。 #### 22. SharedPreferences的读写问题及优化建议 - **问题**:大量数据读写会导致性能下降。 - **优化**:对于大数据量的操作,考虑使用数据库...