在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ golang 中如何返回一個(gè)空的對(duì)象

golang 中如何返回一個(gè)空的對(duì)象

自定義類型 CommPack

type CommPack struct {
    Cmd byte
    Data []byte
}
/**

 */
func comm(pack CommPack, data []byte) (CommPack, error)  {

    lock.Lock()
    defer lock.Unlock()

    // 整理數(shù)據(jù)包
    data = pack.Full( data )
    log.Println( "發(fā)送數(shù)據(jù)包", tool.ByteToHex(data) )


    // 發(fā)送數(shù)據(jù)
    n, e := gs.Write( data )

    if nil != e {
        log.Println("發(fā)送失敗", e)
    }else{
        log.Println("成功發(fā)送 ", n)
    }


    out := make(chan CommPack, 1)
    err := make(chan error, 1)
    timeout := make(chan bool, 1)

    // 開始讀取
    go wrapRead(out, err)
    // 并發(fā)執(zhí)行一個(gè)函數(shù),等待1s后向timeout寫入true
    go func() {
        time.Sleep(1000)
        timeout <- true
    }()

    select {
        case res:= <- out :

            log.Println("接收響應(yīng)成功")
            if  pack.Cmd == res.Cmd{
                return res, nil
            }else {
                return res, errors.New("請(qǐng)求響應(yīng)不匹配")
            }

        case ce := <- err:
            return  nil, ce

        case <- timeout :
            log.Println("time out...")
            return  _, errors.New("接收響應(yīng)超時(shí)")
    }

錯(cuò)誤了之后怎么能方便的返回一個(gè)空的對(duì)象,此時(shí)對(duì)象本身其實(shí)已經(jīng)不重要了。

return nil, ce

return _, errors.New("接收響應(yīng)超時(shí)")

都不對(duì)

回答
編輯回答
真難過

樓上正解,返回值使用指針代替,這種情況比較常見一些

2018年4月12日 05:23
編輯回答
殘淚

返回 *CommPack
return nil,err

2017年5月1日 08:52