极客时间-Golang进阶训练营(2.2 Error Type)学习笔记 1.Sentinel Error 预定义的特定错误 - 不建议 if err == ErrSomething {...} 优点:通过fmt.Errorf携带详细的上下文信息,在错误追踪的时候更高效,并且方便程序员做调试 缺点:它使用起来不够灵活,需要将结果和预先申明的值做对比,因此可能会破坏之前
Golang中我们也可以定义自己的Error类型,然后使用断言决定是那种Error来获取更多的错误数据,看下下面的示例代码,了解下自定义Error的简单使用 typeSelfError struct{Code int Err error}func(this *SelfError)Error()string{returnthis.Err.Error()}func(this *SelfError)GetCode()int{returnthis.Code}func OpenFile...
package main import ( "fmt" ) type MyError struct { Code uint32 Message string } func NewMyError(code uint32, msg string) error { return &MyError{ Code: code, Message: msg, } } // GetCode 获取错误码 func (e *MyError) GetCode() uint32 { return e.Code } // GetMessage 获取错...
type SelfError struct { Code int Err error } func (this *SelfError) Error() string { return this.Err.Error() } func (this *SelfError) GetCode() int { return this.Code } func OpenFile(name string) error { err :=os.Rename("/tmp/test","/tmp/test1") iferr !=nil { return &Se...
=nil{log.Error("cache.GetQueryKey",zap.Error(err))}result,err:=cache.GetCacheKey(key)iferr!=nil{// 分发请求result=xxxxx(rw,obj,funcName,Param)ifresult.Code==errors.ADMIN_SECUSS{// TODO HANK 根据环境设置时间// 缓存处理cache.SetQueryData(key,result,expire)}}returnresult}...
type error interface {Error() string} 它包含一个带有Error()字符串的方法。任何实现这个接口的类型都可以作为一个错误使用。这个方法提供了对错误的描述。 当打印错误时,fmt.Println函数在内部调用Error() 方法来获取错误的描述。这就是错误描述是如何在一行中打印出来的。
ct := c.Request.Header.Get("Content-Type")if!strings.HasPrefix(ct,"multipart/form-data; boundary") {return}ifmb >0{ bytes := mb *1024*1024maxBodyBytes := bytes +512sl := c.Request.Header.Get("Content-Length") slog.Warn("[SizeLimit]","c.Request.Header.Content-Length", sl)iflen...
本项目包含了前端和后端的代码,前端是一个Vue3+TypeScript的Admin。但,前端不是本文的着重点,本文着重讲解后端。 前端项目在frontend文件夹中,后端项目在backend文件夹中, 后端项目结构: ├─api # proto协议存放的路径 │ ├─admin # Admin服务,定义了REST的接口。
反射就是用来检测存储在接口变量内部(值value;类型concrete type) pair对的一种机制。 pair实例1 package main import"fmt"func main() {varastring//pair<statictype:string, value:"aceld">a ="aceld"//pair<type:string, value:"aceld">varallTypeinterface{} ...
1测试方法样式是func Testxxx(t *testing.T),方法名词必须以Test开头,xxx首字母需要大写,func TestFoo(t *testing.T) 2测试方法参数必须 t *testing.T,函数中通过调用testing.T的Error, Errorf和FailNow, Fatal, FatalIf等方法说明测试不通过,以error 打印函数不会终止测试,Fatal类型会造成该单元测试终止。 当...