我在调用webservice时使用以下内容检查超时,但我想特别检查是否返回了超时错误.我该怎么做:S
我有这个:
// Timeout
type Timeout struct {
Connect time.Duration
ReadWrite time.Duration
}
// TimeoutDialer
func TimeoutDialer(timeout *Timeout) func(net, addr string) (c net.Conn, err error) {
return func(netw, addr string) (net.Conn, error) {
conn, err := net.DialTimeout(netw, addr, timeout.Connect)
if err != nil {
return nil, err
}
conn.SetDeadline(time.Now().Add(timeout.ReadWrite))
return conn, nil
}
}
// HttpClient
func HttpClient(config Config) *http.Client {
to := &Timeout{
Connect: time.Duration(config.MaxWait) * time.Second,
ReadWrite: time.Duration(config.MaxWait) * time.Second,
}
return &http.Client{
Transport: &http.Transport{
Dial: TimeoutDialer(to),
}, …Run Code Online (Sandbox Code Playgroud) 我正在阅读Go Go Programming Languagex.(T)中的类型断言并且不理解它们.
我知道有不同的场景:
这是我不明白的:
我也搜索了这个话题,仍然不明白.
刚开始使用Golang.我认为声明一个错误变量并在你的错误结构中使用它来确定出错了是不恰当的,就像在strconv.go中所做的那样.在那里,ErrRange并且ErrSyntax被声明,并且在适当的时候,对它们的引用NumError在它们返回时存储在结构中.我认为原因是因为存储的错误引用的地址NumError可以与ErrRange和ErrSyntax变量进行比较,以确定返回哪种类型的错误.
是否存在"标准"声明的错误类型?例如,在Java中,你有类似的东西java.lang.IllegalArgumentException.例如,ErrArgument或者ErrUnsupportedOperation我可以在我自己的代码中使用,而不是每次创建意味着相同的新错误变量?
我想知道什么是在go中处理多级抽象错误的最佳方法.每次如果我必须在程序中添加新的级别抽象,我就不得不将错误代码从级别转移到级别高.因此是日志文件中的重复社区或我必须重新删除通信表单级别并将其转移到更高级别.以下简单示例.我跳过创建每个对象更快和celar代码,但我认为你了解我的问题
type ObjectOne struct{
someValue int
}
func (o* ObjectOne)CheckValue()error{
if o.someValue == 0 {
SomeLogger.Printf("Value is 0 error program") // communicate form first level abstraction to logger
return errors.New("Internal value in object is 0")
}
return nil
}
type ObjectTwoHigherLevel struct{
objectOne ObjectOne
}
func (oT* ObjectTwoHigherLevel)CheckObjectOneIsReady() error{
if err := oT.objectOne.CheckValue() ; err != nil{
SomeLogger.Printf("Value in objectOne is not correct for objectTwo %s" , err) // second communicate
return err
}
return nil
}
type …Run Code Online (Sandbox Code Playgroud)