相关疑难解决方法(0)

具体检查超时错误

我在调用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

29
推荐指数
3
解决办法
2万
查看次数

在Go中解释类型断言

我正在阅读Go Go Programming Languagex.(T)类型断言并且不理解它们.

我知道有不同的场景:

  • T是具体类型或接口
  • 可以返回一个(断言值?)或两个(ok)值

这是我不明白的:

  • 我为什么要用它们?
  • 他们究竟回归了什么?

我也搜索了这个话题,仍然不明白.

go

19
推荐指数
1
解决办法
8563
查看次数

有标准的Err变量吗?

刚开始使用Golang.我认为声明一个错误变量并在你的错误结构中使用它来确定出错了是不恰当的,就像在strconv.go中所做的那样.在那里,ErrRange并且ErrSyntax被声明,并且在适当的时候,对它们的引用NumError在它们返回时存储在结构中.我认为原因是因为存储的错误引用的地址NumError可以与ErrRangeErrSyntax变量进行比较,以确定返回哪种类型的错误.

是否存在"标准"声明的错误类型?例如,在Java中,你有类似的东西java.lang.IllegalArgumentException.例如,ErrArgument或者ErrUnsupportedOperation我可以在我自己的代码中使用,而不是每次创建意味着相同的新错误变量?

go

8
推荐指数
2
解决办法
1262
查看次数

从多个抽象级别处理错误的最佳实践

我想知道什么是在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)

error-handling go

7
推荐指数
1
解决办法
2138
查看次数

标签 统计

go ×4

error-handling ×1