亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang errors包快速上手

 更新時(shí)間:2025年05月23日 10:15:01   作者:戀喵大鯉魚  
errors 包是用于處理錯(cuò)誤的標(biāo)準(zhǔn)庫(kù), errors 包提供的功能比較簡(jiǎn)單,使用起來非常方便,下面就來介紹一下,感興趣的可以了解一下

在 Golang 中,errors 包是用于處理錯(cuò)誤的標(biāo)準(zhǔn)庫(kù), errors 包提供的功能比較簡(jiǎn)單,使用起來非常方便。

接下來具體講解一下 errors 包提供的變量、類型和函數(shù)。

1.變量

errors 包只定義了一個(gè)全局變量 ErrUnsupported。

var ErrUnsupported = New("unsupported operation")

ErrUnsupported 表示請(qǐng)求的操作不能執(zhí)行,因?yàn)樗皇苤С?。例如,調(diào)用os.Link()當(dāng)使用的文件系統(tǒng)不支持硬鏈接時(shí)。

函數(shù)和方法不應(yīng)該返回這個(gè)錯(cuò)誤,而應(yīng)該返回一個(gè)包含適當(dāng)上下文的錯(cuò)誤,滿足:

errors.Is(err, errors.ErrUnsupported)

要么直接包裝 ErrUnsupported,要么實(shí)現(xiàn)一個(gè) Is 方法。

函數(shù)和方法應(yīng)該說明何種情況下會(huì)返回包含 ErrUnsupported 的錯(cuò)誤。

2.類型

error 是一個(gè)內(nèi)建的接口類型,任何類型只要實(shí)現(xiàn)了 Error() string 方法,就實(shí)現(xiàn)了 error 接口,這意味著該類型的實(shí)例可以被當(dāng)作一個(gè) error 來處理。

// The error built-in interface type is the conventional interface for
// representing an error condition, with the nil value representing no error.
type error interface {
    Error() string
}

3.函數(shù)

3.1 New

errors.New 用于創(chuàng)建一個(gè)新的錯(cuò)誤對(duì)象。它接收一個(gè)字符串作為錯(cuò)誤消息,并返回一個(gè)錯(cuò)誤對(duì)象。

func New(text string) error

我們可以看下其具體實(shí)現(xiàn):

// New returns an error that formats as the given text.
// Each call to New returns a distinct error value even if the text is identical.
func New(text string) error {
    return &errorString{text}
}

// errorString is a trivial implementation of error.
type errorString struct {
    s string
}

func (e *errorString) Error() string {
    return e.s
}

可以看到,New 返回的是實(shí)現(xiàn)了 error 接口的具體類型 *errorString。

3.2 Is

簡(jiǎn)介

errors.Is 函數(shù)是一個(gè)用于錯(cuò)誤處理的核心工具,用于檢查錯(cuò)誤鏈(error chain)中是否存在某個(gè)特定的錯(cuò)誤實(shí)例。

它是 Go 1.13 版本引入的錯(cuò)誤處理增強(qiáng)功能之一,與 errors.As 和 errors.Unwrap 共同提供了更靈活的錯(cuò)誤處理機(jī)制。

函數(shù)簽名

func Is(err, target error) bool
  • err: 要檢查的錯(cuò)誤。
  • target: 我們想要確認(rèn)的錯(cuò)誤。
  • 返回值: 如果錯(cuò)誤鏈中任一錯(cuò)誤與目標(biāo)錯(cuò)誤相同,則返回 true。

核心功能

  • 遞歸解包錯(cuò)誤鏈errors.Is 會(huì)通過 Unwrap() 或Unwrap() []error方法逐層解包錯(cuò)誤鏈,檢查每一層錯(cuò)誤是否與 target 匹配。
  • 值相等性檢查檢查錯(cuò)誤的“值”是否與 target 相等。默認(rèn)使用 == 操作符比較,但若錯(cuò)誤類型實(shí)現(xiàn)了 Is(error) bool 方法,則優(yōu)先調(diào)用該方法進(jìn)行判斷(允許自定義相等邏輯)。
  • 支持自定義錯(cuò)誤匹配邏輯如果自定義錯(cuò)誤類型需要定義特殊的相等規(guī)則(例如比較結(jié)構(gòu)體字段而非指針地址),可以實(shí)現(xiàn) Is(error) bool 方法。

示例代碼

package main

import (
    "errors"
    "fmt"
)

var ErrNotFound = errors.New("not found")

func main() {
    err := fmt.Errorf("context: %w", ErrNotFound)
    if errors.Is(err, ErrNotFound) {
        fmt.Println("錯(cuò)誤鏈中包含 ErrNotFound")
    }

    errNotFoundNew := errors.New("not found")
    fmt.Println(errors.Is(errNotFoundNew, ErrNotFound)) // false
}

運(yùn)行輸出:

錯(cuò)誤鏈中包含 ErrNotFound
false

因?yàn)?err 是基于 ErrNotFound 包裝出來的,所以 Is 判斷返回 true。

因?yàn)?errNotFoundNew 是一個(gè)新的 error,雖然錯(cuò)誤內(nèi)容與 ErrNotFound 相同,但是二者是兩個(gè)獨(dú)立的 error 對(duì)象,所以 Is 判斷返回 false。

使用場(chǎng)景

  • 檢查預(yù)定義錯(cuò)誤例如判斷錯(cuò)誤是否為 io.EOF 或 os.ErrNotExist:
if errors.Is(err, io.EOF) {
    // 處理文件結(jié)束邏輯
}
  • 自定義錯(cuò)誤匹配當(dāng)需要根據(jù)錯(cuò)誤的某些字段(而非指針地址)匹配時(shí),自定義 Is 方法:
type ValidationError struct { Field string }
func (e *ValidationError) Is(target error) bool {
    t, ok := target.(*ValidationError)
    return ok && e.Field == t.Field
}
  • 處理多層錯(cuò)誤鏈自動(dòng)遍歷包裹錯(cuò)誤(如 fmt.Errorf + %w 生成的錯(cuò)誤鏈):
err := fmt.Errorf("layer2: %w", fmt.Errorf("layer1: %w", originalErr))
if errors.Is(err, originalErr) { // 直接檢查最底層錯(cuò)誤
    // 匹配成功
}

與 == 操作符的區(qū)別:

  • 默認(rèn)行為:如果錯(cuò)誤類型未實(shí)現(xiàn) Is 方法,errors.Is 默認(rèn)使用 == 比較錯(cuò)誤值和 target。但對(duì)于指針類型的錯(cuò)誤(如 &MyError{}),== 比較的是指針地址而非值內(nèi)容。
  • 自定義邏輯:通過實(shí)現(xiàn) Is 方法,可以控制錯(cuò)誤的匹配邏輯(如比較結(jié)構(gòu)體字段)。

注意事項(xiàng)

  • 優(yōu)先實(shí)現(xiàn) Is 方法:如果自定義錯(cuò)誤需要支持值匹配(而非指針匹配),必須實(shí)現(xiàn) Is 方法。

  • target可以是nil:如果 target 為 nil,errors.Is 僅在 err 也為 nil 時(shí)返回 true。

  • 性能錯(cuò)誤鏈較長(zhǎng)時(shí),遞歸解包可能導(dǎo)致輕微性能開銷,但通常可忽略。

小結(jié)

errors.Is 是 Go 錯(cuò)誤處理的基石之一,它通過遞歸解包錯(cuò)誤鏈,提供了一種安全、統(tǒng)一的方式來檢查特定錯(cuò)誤的存在。結(jié)合以下實(shí)踐可最大化其效用:

  • 對(duì)需要值匹配的自定義錯(cuò)誤實(shí)現(xiàn) Is 方法。
  • 優(yōu)先使用 errors.Is 而非 == 直接比較錯(cuò)誤(確保兼容錯(cuò)誤鏈)。
  • 與 errors.As 分工:Is 用于值匹配,As 用于類型提取。

3.3 As

簡(jiǎn)介

Golang 中的 errors.As 函數(shù)是一個(gè)用于錯(cuò)誤處理的重要工具,它提供了一種類型安全的方式,用于檢查錯(cuò)誤樹中是否存在某個(gè)特定類型的錯(cuò)誤,并提取該類型的錯(cuò)誤實(shí)例。

它是 Go 1.13 引入的錯(cuò)誤處理增強(qiáng)功能之一,與 errors.Is 和 errors.Unwrap 共同構(gòu)成了更靈活的錯(cuò)誤處理機(jī)制。

函數(shù)簽名

func As(err error, target any) bool
  • err: 要檢查的錯(cuò)誤樹。
  • target: 一個(gè)指向目標(biāo)類型的指針,用于存儲(chǔ)結(jié)果。
  • 返回值: 如果錯(cuò)誤樹中存在指定的類型,則返回 true,并且 target 參數(shù)會(huì)被設(shè)置為相應(yīng)的錯(cuò)誤值。

核心功能

errors.As 會(huì)遞歸遍歷錯(cuò)誤樹(通過 Unwrap() 或 Unwrap() []error 方法解包錯(cuò)誤),檢查是否存在與 target 類型匹配的錯(cuò)誤。如果找到,它會(huì)將匹配的錯(cuò)誤值賦值給 target,并返回 true。

如果錯(cuò)誤的具體值可分配給 target 所指向的值,或者如果錯(cuò)誤有一個(gè)方法As(any) bool使得As(target)返回true,則錯(cuò)誤匹配 target。在后一種情況下,As 方法負(fù)責(zé)將錯(cuò)誤值設(shè)置到 target。

與 errors.Is 的區(qū)別:

  • errors.Is(err, target):檢查錯(cuò)誤樹中是否存在值等于 target 的錯(cuò)誤(值比較)。
  • errors.As(err, &target):檢查錯(cuò)誤樹中是否存在類型與 target 匹配的錯(cuò)誤(類型斷言)。

示例代碼

package main

import (
    "errors"
    "fmt"
)

// 自定義錯(cuò)誤類型
type MyError struct {
    Code    int
    Message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("code: %d, msg: %s", e.Code, e.Message)
}

func main() {
    err := &MyError{Code: 404, Message: "Not Found"}
    wrappedErr := fmt.Errorf("wrapper: %w", err) // 包裹錯(cuò)誤

    var myErr *MyError
    if errors.As(wrappedErr, &myErr) {
        fmt.Println("Found MyError:", myErr.Code, myErr.Message)
        // 輸出: Found MyError: 404 Not Found
    }
}

在這個(gè)例子中:

  • 自定義錯(cuò)誤類型 MyError 實(shí)現(xiàn)了 error 接口。
  • 通過 fmt.Errorf 和 %w 包裹原始錯(cuò)誤,形成錯(cuò)誤樹。
  • errors.As 檢查包裹后的錯(cuò)誤樹,找到 MyError 類型的錯(cuò)誤實(shí)例,并將其賦值給 myErr。

使用場(chǎng)景

  • 提取特定錯(cuò)誤類型的詳細(xì)信息當(dāng)錯(cuò)誤類型包含額外字段(如錯(cuò)誤碼、上下文信息)時(shí),可以通過 errors.As 提取這些信息。

  • 處理標(biāo)準(zhǔn)庫(kù)中的錯(cuò)誤類型例如,檢查一個(gè)錯(cuò)誤是否是 os.PathError 類型,以獲取文件路徑相關(guān)的詳細(xì)信息:

var pathErr *os.PathError
if errors.As(err, &pathErr) {
    fmt.Println("Failed at path:", pathErr.Path)
}
  • 多層級(jí)錯(cuò)誤解包無需手動(dòng)調(diào)用 Unwrap() 遍歷錯(cuò)誤鏈,errors.As 會(huì)自動(dòng)處理嵌套錯(cuò)誤。

注意事項(xiàng)

  • target 必須是指針target 必須是一個(gè)指向接口或具體類型的指針。例如:
var target *MyError        // 正確(具體類型指針)
var target error = &MyError{} // 正確(接口類型指針)
  • 類型必須匹配target 的類型需要與錯(cuò)誤鏈中某個(gè)錯(cuò)誤的具體類型完全一致(或接口類型)。

  • 性能如果錯(cuò)誤樹非常長(zhǎng),errors.As 可能需要遍歷整個(gè)樹,但實(shí)際場(chǎng)景中性能影響通??珊雎?。

小結(jié)

errors.As 是 Go 錯(cuò)誤處理中類型斷言的最佳實(shí)踐,它簡(jiǎn)化了從錯(cuò)誤鏈中提取特定類型錯(cuò)誤的操作。結(jié)合 errors.Is 和錯(cuò)誤包裹(fmt.Errorf + %w),可以構(gòu)建清晰、可維護(hù)的錯(cuò)誤處理邏輯。

3.4 Unwrap

簡(jiǎn)介

errors.Unwrap 是 Go 1.13 引入的錯(cuò)誤處理函數(shù),用于獲取被包裝(wrapped)錯(cuò)誤的原始錯(cuò)誤。它是 Go 錯(cuò)誤處理機(jī)制中錯(cuò)誤鏈(error chain)支持的核心部分。

函數(shù)簽名

func Unwrap(err error) error
  • 解包錯(cuò)誤:如果 err 實(shí)現(xiàn)了 Unwrap() error 方法,則返回該方法的結(jié)果。
  • 無包裝時(shí):如果錯(cuò)誤不支持解包或已經(jīng)是底層錯(cuò)誤,返回 nil。
  • 簡(jiǎn)單直接:僅解包一層,不會(huì)遞歸解包整個(gè)錯(cuò)誤鏈。

核心功能

  • 解包錯(cuò)誤鏈用于從包裹錯(cuò)誤(如通過 fmt.Errorf 和 %w 生成的錯(cuò)誤)中提取下一層錯(cuò)誤。
  • 支持自定義錯(cuò)誤類型。若自定義錯(cuò)誤類型實(shí)現(xiàn)了 Unwrap() error 方法,errors.Unwrap 可自動(dòng)調(diào)用它來解包錯(cuò)誤。

使用示例

err := fmt.Errorf("wrapper: %w", io.EOF)

unwrapped := errors.Unwrap(err)
fmt.Println(unwrapped == io.EOF) // 輸出: true
fmt.Println(unwrapped)          // 輸出: EOF
errors.Unwrap 通常與 fmt.Errorf 的 %w 動(dòng)詞配合使用:
func process() error {
    if err := step1(); err != nil {
        return fmt.Errorf("step1 failed: %w", err)
    }
    // ...
}

err := process()
if errors.Unwrap(err) != nil {
    // 處理原始錯(cuò)誤
}
  • 標(biāo)準(zhǔn)接口:要求被解包的錯(cuò)誤實(shí)現(xiàn) Unwrap() error 方法
  • 非遞歸:只解包一層,要解包整個(gè)錯(cuò)誤鏈需要循環(huán)調(diào)用
  • 與 errors.Is/As 配合:errors.Is 和 errors.As 內(nèi)部會(huì)自動(dòng)處理錯(cuò)誤鏈

使用場(chǎng)景

  • 逐層檢查錯(cuò)誤鏈通過循環(huán)調(diào)用 errors.Unwrap 遍歷所有嵌套錯(cuò)誤:
currentErr := err
for currentErr != nil {
    fmt.Println(currentErr)
    currentErr = errors.Unwrap(currentErr)
}
  • 結(jié)合 errors.Is** 和 **errors.As雖然 errors.Is 和 errors.As 會(huì)自動(dòng)遍歷錯(cuò)誤鏈,但在需要手動(dòng)提取特定層級(jí)錯(cuò)誤時(shí),可用 Unwrap 配合使用。

  • 自定義錯(cuò)誤類型的分層處理為自定義錯(cuò)誤實(shí)現(xiàn) Unwrap() 方法,使其能融入錯(cuò)誤鏈機(jī)制。

注意事項(xiàng)

  • 僅解包一層每次調(diào)用 errors.Unwrap 只返回直接包裹的下層錯(cuò)誤。需循環(huán)調(diào)用以遍歷整個(gè)鏈。

  • 依賴 Unwrap() 方法只有實(shí)現(xiàn)了 Unwrap() error 方法的錯(cuò)誤才能被正確解包。例如:

  • fmt.Errorf 使用 %w 包裹的錯(cuò)誤會(huì)自動(dòng)實(shí)現(xiàn)此方法。
  • 自定義錯(cuò)誤需顯式實(shí)現(xiàn) Unwrap() error。
  • 空值處理如果 err 為 nil,或未實(shí)現(xiàn) Unwrap,或 Unwrap 返回 nil,則函數(shù)返回 nil。

小結(jié)

errors.Unwrap 是處理錯(cuò)誤鏈的基礎(chǔ)工具,適用于需要手動(dòng)逐層解包錯(cuò)誤的場(chǎng)景。結(jié)合 errors.Is 和 errors.As 可以實(shí)現(xiàn)更高效和安全的錯(cuò)誤檢查。在實(shí)際開發(fā)中,優(yōu)先使用 errors.Is 和 errors.As 來操作錯(cuò)誤鏈,僅在需要直接訪問特定層級(jí)錯(cuò)誤時(shí)使用 errors.Unwrap。

3.5 Join

簡(jiǎn)介

Golang 中的 errors.Join 函數(shù)是 Go 1.20 版本引入的一個(gè)錯(cuò)誤處理工具,用于將多個(gè)錯(cuò)誤合并為一個(gè)包裝錯(cuò)誤(wrapped error)。

它特別適用于需要同時(shí)處理多個(gè)錯(cuò)誤(例如并發(fā)操作中多個(gè)協(xié)程返回錯(cuò)誤)的場(chǎng)景。

函數(shù)簽名

func Join(errs ...error) error
  • 參數(shù) errs …error:一個(gè)可變參數(shù)列表,接收多個(gè) error 類型的值。
  • 返回值 如果輸入的 errs 中存在至少一個(gè)非 nil 的錯(cuò)誤,則返回一個(gè)合并后的包裝錯(cuò)誤;否則返回 nil。

核心功能

  • 合并多個(gè)錯(cuò)誤errors.Join 會(huì)將所有非 nil 的錯(cuò)誤合并為一個(gè)包裝錯(cuò)誤。合并后的錯(cuò)誤可以通過 errors.Unwrap 獲取所有原始錯(cuò)誤的切片。
  • 兼容 errors.Is和 errors.As合并后的錯(cuò)誤支持通過 errors.Is 和 errors.As 檢查或提取其中的特定錯(cuò)誤。例如:
  • errors.Is(err, target):如果合并后的錯(cuò)誤鏈中存在與 target 匹配的錯(cuò)誤,返回 true。
  • errors.As(err, &target):可以提取合并錯(cuò)誤鏈中的第一個(gè)匹配類型的錯(cuò)誤。
  • 錯(cuò)誤信息拼接合并后的錯(cuò)誤信息是多個(gè)原始錯(cuò)誤信息的拼接,以換行符分隔。例如:
err1 := errors.New("error 1")
err2 := errors.New("error 2")
joinedErr := errors.Join(err1, err2)
fmt.Println(joinedErr)
// 輸出:
// error 1
// error 2
示例代碼
package main

import (
    "errors"
    "fmt"
    "io/fs"
    "os"
)

func main() {
    err1 := errors.New("file not found")

    // 創(chuàng)建一個(gè) fs.PathError 錯(cuò)誤
    pathErr := &fs.PathError{
        Op:   "open",
        Path: "/etc/passwd",
        Err:  os.ErrPermission,
    }
    err2 := fmt.Errorf("operation failed: %w", pathErr)

    // 合并多個(gè)錯(cuò)誤
    joinedErr := errors.Join(err1, err2)

    // 打印合并后的錯(cuò)誤信息
    fmt.Println("Joined error:")
    fmt.Println(joinedErr)

    // 檢查是否包含特定錯(cuò)誤
    if errors.Is(joinedErr, err1) {
        fmt.Println("Found 'file not found' error")
    }

    // 提取錯(cuò)誤鏈中的某個(gè)類型
    var targetErr *fs.PathError
    if errors.As(joinedErr, &targetErr) {
        fmt.Println("Found PathError:", targetErr)
    }
}

運(yùn)行輸出:

Joined error:
file not found
operation failed: open /etc/passwd: permission denied
Found 'file not found' error
Found PathError: open /etc/passwd: permission denied

使用場(chǎng)景

  • 并發(fā)操作中的錯(cuò)誤收集在多個(gè)協(xié)程并發(fā)執(zhí)行時(shí),可以使用 errors.Join 收集所有協(xié)程返回的錯(cuò)誤:
func processTasks(tasks []Task) error {
    var wg sync.WaitGroup
    var mu sync.Mutex
    var errs []error

    for _, task := range tasks {
        wg.Add(1)
        go func(t Task) {
            defer wg.Done()
            if err := t.Run(); err != nil {
                mu.Lock()
                errs = append(errs, err)
                mu.Unlock()
            }
        }(task)
    }

    wg.Wait()
    return errors.Join(errs...)
}
  • 批量操作中的錯(cuò)誤匯總例如,處理多個(gè)文件或請(qǐng)求時(shí),統(tǒng)一返回所有錯(cuò)誤:
func batchProcess(files []string) error {
    var errs []error
    for _, file := range files {
        if err := processFile(file); err != nil {
            errs = append(errs, fmt.Errorf("process %s: %w", file, err))
        }
    }
    return errors.Join(errs...)
}
  • 兼容已有錯(cuò)誤處理邏輯合并后的錯(cuò)誤仍然可以被 errors.Is 和 errors.As 處理,無需修改現(xiàn)有代碼。

注意事項(xiàng)

  • Go 版本要求errors.Join 僅在 Go 1.20 及以上版本可用。

  • 空參數(shù)處理如果所有輸入錯(cuò)誤均為 nil,errors.Join 返回 nil。

  • 錯(cuò)誤解包使用 errors.Unwrap 解包合并后的錯(cuò)誤時(shí),會(huì)返回一個(gè) []error 切片(包含所有非 nil 錯(cuò)誤)。

  • 錯(cuò)誤順序合并后的錯(cuò)誤順序與輸入?yún)?shù)的順序一致,但 errors.Is 和 errors.As 會(huì)按順序檢查所有錯(cuò)誤。

小結(jié)

errors.Join 提供了一種簡(jiǎn)潔的方式將多個(gè)錯(cuò)誤合并為一個(gè),特別適用于需要匯總多個(gè)錯(cuò)誤信息的場(chǎng)景(如并發(fā)編程或批量處理)。通過結(jié)合 errors.Is 和 errors.As,可以靈活地檢查或提取合并后的錯(cuò)誤鏈中的特定錯(cuò)誤。它是 Go 錯(cuò)誤處理工具箱中的重要補(bǔ)充,進(jìn)一步提升了錯(cuò)誤管理的便利性。

4.小結(jié)

errors 包是 Go 語言標(biāo)準(zhǔn)庫(kù)中用于錯(cuò)誤處理的核心包,隨著 Go 版本的演進(jìn),它提供了越來越強(qiáng)大的錯(cuò)誤處理能力。

以下是主要功能的總結(jié):

  • 基礎(chǔ)錯(cuò)誤創(chuàng)建
  • New(text string) error:創(chuàng)建簡(jiǎn)單的錯(cuò)誤對(duì)象
  • 示例:err := errors.New(“file not found”)
  • 錯(cuò)誤檢查
  • Is(err, target error) bool:檢查錯(cuò)誤鏈中是否包含特定錯(cuò)誤
  • 示例:if errors.Is(err, os.ErrNotExist) {…}
  • 錯(cuò)誤類型提取
  • As(err error, target interface{}) bool:從錯(cuò)誤鏈中提取特定類型的錯(cuò)誤
  • 示例:var perr *fs.PathError; if errors.As(err, &perr) {…}
  • 錯(cuò)誤包裝與解包
  • Unwrap(err error) error:解包一層錯(cuò)誤
  • 通過 fmt.Errorf 的 %w 動(dòng)詞包裝錯(cuò)誤
  • 示例:wrapped := fmt.Errorf(“context: %w”, err)
  • 錯(cuò)誤組合
  • Join(errs …error) error(Go 1.20+):合并多個(gè)錯(cuò)誤為一個(gè)組合錯(cuò)誤
  • 示例:combined := errors.Join(err1, err2, err3)

errors 包與標(biāo)準(zhǔn)庫(kù)中的其他錯(cuò)誤類型(如 os.PathError、net.OpError 等)配合使用,構(gòu)成了 Go 強(qiáng)大的錯(cuò)誤處理體系。

參考文獻(xiàn)

pkg.go.dev/errors

到此這篇關(guān)于Golang errors包快速上手的文章就介紹到這了,更多相關(guān)Golang errors包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go json反序列化“null“的問題解決

    Go json反序列化“null“的問題解決

    本文主要介紹了Go json反序列化“null“的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang標(biāo)準(zhǔn)庫(kù)time時(shí)間包的使用

    golang標(biāo)準(zhǔn)庫(kù)time時(shí)間包的使用

    時(shí)間和日期是我們編程中經(jīng)常會(huì)用到的,本文主要介紹了golang標(biāo)準(zhǔn)庫(kù)time時(shí)間包的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 用Go語言標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由

    用Go語言標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由

    在上一節(jié)中創(chuàng)建了項(xiàng)目,這篇文章主要介紹如何用Go語言標(biāo)準(zhǔn)庫(kù)創(chuàng)建路由,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下
    2023-05-05
  • 一文帶你熟悉Go語言中的分支結(jié)構(gòu)

    一文帶你熟悉Go語言中的分支結(jié)構(gòu)

    這篇文章主要和大家分享一下Go語言中的分支結(jié)構(gòu)(if?-?else-if?-?else、switch),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • 細(xì)細(xì)探究Go 泛型generic設(shè)計(jì)

    細(xì)細(xì)探究Go 泛型generic設(shè)計(jì)

    這篇文章主要帶大家細(xì)細(xì)探究了Go 泛型generic設(shè)計(jì)及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go語言之init函數(shù)

    Go語言之init函數(shù)

    Go語言有一個(gè)特殊的函數(shù)init,先于main函數(shù)執(zhí)行,實(shí)現(xiàn)包級(jí)別的一些初始化操作。這篇文章介紹了Go中的Init函數(shù),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Go語言基礎(chǔ)switch條件語句基本用法及示例詳解

    Go語言基礎(chǔ)switch條件語句基本用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)switch條件語句基本用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • RabbitMQ延時(shí)消息隊(duì)列在golang中的使用詳解

    RabbitMQ延時(shí)消息隊(duì)列在golang中的使用詳解

    延時(shí)隊(duì)列常使用在某些業(yè)務(wù)場(chǎng)景,使用延時(shí)隊(duì)列可以簡(jiǎn)化系統(tǒng)的設(shè)計(jì)和開發(fā)、提高系統(tǒng)的可靠性和可用性、提高系統(tǒng)的性能,下面我們就來看看如何在golang中使用RabbitMQ的延時(shí)消息隊(duì)列吧
    2023-11-11
  • go-zero 應(yīng)對(duì)海量定時(shí)/延遲任務(wù)的技巧

    go-zero 應(yīng)對(duì)海量定時(shí)/延遲任務(wù)的技巧

    這篇文章主要介紹了go-zero 如何應(yīng)對(duì)海量定時(shí)/延遲任務(wù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 詳解如何用Golang處理每分鐘100萬個(gè)請(qǐng)求

    詳解如何用Golang處理每分鐘100萬個(gè)請(qǐng)求

    在項(xiàng)目開發(fā)中,我們常常會(huì)遇到處理來自數(shù)百萬個(gè)端點(diǎn)的大量POST請(qǐng)求,本文主要介紹了Golang實(shí)現(xiàn)處理每分鐘100萬個(gè)請(qǐng)求的方法,希望對(duì)大家有所幫助
    2023-04-04

最新評(píng)論