欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go的語言錯誤處理 go語言錯誤處理會變嗎

Go 語言的錯誤處理機制是一個優(yōu)秀的設(shè)計嗎

只是Go里面的Error Check比較不直觀而已,其實可以封裝一層讓它更好看的。比如Rust的ResultT, E,它包含了一個Ok(..)和Err(..),Ok表示正確,然后帶有正確的返回值,而Err則表示錯誤,然后帶著錯誤信息。這樣處理起來就比較好看了,你可以選擇忽略它,讓程序直接在出錯的地方掛掉,像這樣someFunctionMayFail().unwrap(); // 要是出錯了,就直接掛掉

創(chuàng)新互聯(lián)建站是一家專業(yè)提供安康企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、成都做網(wǎng)站、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為安康眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。

或者在掛掉的時候,帶一個自己的出錯信息someFunctionMayFail().ok().expect("Expecting a xxxxx");

或者自己處理let return_val = match someFunctionMayFail() {

Ok(v) = v,

Err(err) = {

// Deal with the error

// for example:

// fail!("Fail!!!! {}", err);

}

};

當然,我不是說它和Go的那個Error Check有什么本質(zhì)的區(qū)別,反正都是處理錯誤,但是我個人覺得Rust這樣寫更舒服。

go 的錯誤處理 error

error 是一種內(nèi)建的接口類型,不需要引用 任何包就可以直接使用。error 接口只聲明了一個 Error 方法,任何實現(xiàn)了該方法的結(jié)構(gòu)體都可以作為 error 來使用。

標準庫 errors 包中的 errorString 就是實現(xiàn)了 error 接口的一個例子:

針對 error 而言,異常處理包括如何檢查錯誤,如何傳遞錯誤。

為了解決這一問題,Go 1.13 中引入了對error的優(yōu)化,最核心的內(nèi)容就是引入了 wrapError 這一新的 error 類型。

go的錯誤碼處理

目錄結(jié)構(gòu): 都在src的目錄下

主要是web.go 和http.go 的交互,fbn.go做了一個簡單的斐波那契數(shù)列

先看web.go:

```

package main //入口

import (

"exdefer/filelistenserver/fileting"

"log"

"net/http"

"os"

)

type appHandler func(writer http.ResponseWriter, request *http.Request) error ? //定義一個實現(xiàn)錯誤的方法

func errW(handler appHandler) func(writer http.ResponseWriter, request *http.Request) { //實現(xiàn)上面的方法

return func(writer http.ResponseWriter, request *http.Request) {

err := handler(writer, request) //http 的response 和request?? 設(shè)置一個錯誤的返回值

if err != nil { // 判斷一下

log.Print("Print array ", err.Error(), "\n") //打印log

code := http.StatusOK //code 默認設(shè)置成200

switch { //switch選擇

case os.IsNotExist(err): //如果輸入的這個文件不存在

code = http.StatusNotFound //404

case os.IsPermission(err): //如果權(quán)限不夠

code = http.StatusForbidden //403

default: //否則的話

code = http.StatusInternalServerError //500

}

http.Error(writer, http.StatusText(code), code) //輸出 第一個參數(shù) 是response,第二個是 錯誤描述,返回的狀態(tài)碼 在swoole里面是$response-end("") /狀態(tài)碼是$response-status("");大同小異

}

}

}

func main() {

//第一個值是你要走的url目錄 swoole里面通過document_root 進行設(shè)置

http.HandleFunc("/list/", errW(fileting.Handlist)) //調(diào)用的http.go的包

err := http.ListenAndServe(":8888", nil) //監(jiān)聽的端口 第二個值一般給nil

if err != nil {

panic(err)

}

}

```

http.go

```

package fileting //聲明包

import (

"io/ioutil"

"net/http"

"os"

)

func Handlist(writer http.ResponseWriter, request *http.Request) error { //方法 返回一個error

path := request.URL.Path[len("/list/"):] //切片 path訪問為localhost:8888/list/xxx.txt 中的xxx.txt

file, err := os.Open(path) //分開寫了,兩個返回值

if err != nil {

//http.Error(writer, err.Error(), http.StatusInternalServerError)

return err //直接return err

}

defer file.Close() //defer 一下? open完要記得

all, err := ioutil.ReadAll(file) //對文件的讀取

if err != nil {

//panic(err)

return err

}

writer.Write(all) //reponse 里面的write 類似swoole $response-end()

return nil //如果沒有錯誤返回nil

}

```

演示一下:

今日的學習,結(jié)束

每天一個知識點:Go 語言的五種錯誤處理策略

當一個函數(shù)調(diào)用返回一個錯誤時,調(diào)用者應(yīng)當負責檢查錯誤并采取合適的處理應(yīng)對。根據(jù)情形,將有許多可能的處理場景。接下來我們看 5 個策略:

Go 語言的錯誤處理有特定的規(guī)律。進行錯誤檢查之后,檢測到失敗的情況往往都在成功之前。如果檢測到的失敗導致函數(shù)返回,成功的邏輯一般不會放在 else 塊中而是在外層的作用域中。函數(shù)會有一種通常的形式,就是在開頭有一連串的檢查來返回錯誤,之后跟著實際的函數(shù)體一直到最后。

網(wǎng)頁名稱:go的語言錯誤處理 go語言錯誤處理會變嗎
URL網(wǎng)址:http://chinadenli.net/article24/ddodpce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)關(guān)鍵詞優(yōu)化域名注冊建站公司營銷型網(wǎng)站建設(shè)用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)