欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go開發(fā)go-optioner工具實現(xiàn)輕松生成函數(shù)選項模式代碼

 更新時間:2023年07月25日 08:45:36   作者:Go技術干貨  
go-optioner?是一個在?Go?代碼中生成函數(shù)選項模式代碼的工具,可以根據(jù)給定的結(jié)構(gòu)定義自動生成相應的選項代碼,下面就來聊聊go-optioner是如何使用的吧

前言

最近在進行重構(gòu)代碼時,我遇到了一個問題:在使用函數(shù)選項模式來構(gòu)造一個結(jié)構(gòu)體時,由于該結(jié)構(gòu)體字段過多,我需要手動編寫大量的設置選項函數(shù)的代碼。這樣的工作既繁瑣又容易出錯。

為了解決這個問題,我開始在 github 上面尋找能夠根據(jù)結(jié)構(gòu)體的定義自動生成函數(shù)選項模式代碼的工具,盡管找到了幾個相關工具,但并沒有完全符合我的要求。因此我決定自己動手,開發(fā)了 go-optioner 工具,并將其推薦給大家使用。

go-optioner

go-optioner 是一個在 Go 代碼中生成函數(shù)選項模式代碼的工具。該工具可以根據(jù)給定的結(jié)構(gòu)定義自動生成相應的選項代碼。

安裝

1、go install github.com/chenmingyong0423/go-optioner/cmd/optioner@latest

2、執(zhí)行 optioner 命令檢查是否安裝成功

> optioner
optioner is a tool for generating functional options pattern.
Usage: 
         optioner [flags]
Flags:
         -type <struct name>
         -output <output path>, default: srcDir/opt_xxx_gen.go

如果你安裝成功了,但是提示 optioner 命令找不到,請確認是否已將 $GOPATH/bin 添加到環(huán)境變量中。

使用教程

你可以直接使用 optioner 命令生成對應結(jié)構(gòu)體的 functional options 代碼,也可以使用 go generate 命令進行批量生成。

optioner 命令

1、首先,你需要創(chuàng)建一個包含需要生成函數(shù)選項模式代碼的結(jié)構(gòu)體的 Go 文件。在結(jié)構(gòu)體字段中,您可以使用 opt 標簽來控制是否為 NewXXX() 函數(shù)的必傳參數(shù)和生成相應的函數(shù)。

package example
type User struct {
    Name   string`opt:"-"`
    Age    int
    Gender string
}

如果字段定義了 opt 標簽,并且值為 -,則它將作為 NewXXX 函數(shù)的必要參數(shù),并且不會生成該字段的 WithXXX 函數(shù)。

注意:必須聲明 package。

2、在包含結(jié)構(gòu)體定義的文件目錄下,執(zhí)行 optioner -type XXX 命令,其中 XXX 是結(jié)構(gòu)體的名稱。執(zhí)行命令之后,optioner 工具會根據(jù)結(jié)構(gòu)體定義生成相應的函數(shù)選項模式代碼。內(nèi)容如下所示:

// Generated by optioner -type User; DO NOT EDIT
// If you have any questions, please create issues and submit contributions at:
// https://github.com/chenmingyong0423/go-optioner
package example
type UserOption func(*User)
func NewUser(name string, opts ...UserOption) *User {
    user := &User{
        Name: name,
    }
    for _, opt := range opts {
        opt(user)
    }
    return user
}
func WithAge(age int) UserOption {
    returnfunc(user *User) {
        user.Age = age
    }
}
func WithGender(gender string) UserOption {
    returnfunc(user *User) {
        user.Gender = gender
    }
}

optioner 工具將會生成一個名為 opt_xxx_gen.go 的文件,其中 xxx 是結(jié)構(gòu)體的名稱,例如 opt_user_gen.go。該文件包含生成的函數(shù)選項代碼,用于初始化結(jié)構(gòu)體和設置結(jié)構(gòu)體字段的值。

go generate 命令

請注意,在執(zhí)行 go generate 命令之前,確保您的項目已經(jīng)初始化 Go Modules 或正確設置了 GOPATH,并且您的項目結(jié)構(gòu)符合 Go Modules 或 GOPATH 的要求。

1、首先,你需要創(chuàng)建一個包含需要生成函數(shù)選項模式代碼的結(jié)構(gòu)體的 Go 文件。在結(jié)構(gòu)體定義之上,你需要添加 //go:generate optioner -type XXX 的注釋,其中 XXX 是結(jié)構(gòu)體的名稱。這樣工具就能根據(jù)參數(shù)生成相應的代碼。在結(jié)構(gòu)體字段中,您可以使用 opt 標簽來控制是否為 NewXXX() 函數(shù)的必傳參數(shù)和生成相應的函數(shù)。

package example
//go:generate optioner -type User
type User struct {
    Name   string`opt:"-"`
    Age    int
    Gender string
}

如果字段定義了 opt 標簽,并且值為 -,則它將作為 NewXXX 函數(shù)的必要參數(shù),并且不會生成該字段的 WithXXX 函數(shù)。

注意:必須聲明 package。

2、在包含結(jié)構(gòu)體定義的文件目錄下,執(zhí)行 go generate 命令,這將調(diào)用 optioner 工具并根據(jù)結(jié)構(gòu)體定義生成相應的函數(shù)選項模式代碼。內(nèi)容如下所示:

// Generated by optioner -type User; DO NOT EDIT
// If you have any questions, please create issues and submit contributions at:
// https://github.com/chenmingyong0423/go-optioner
package example
type UserOption func(*User)
func NewUser(name string, opts ...UserOption) *User {
    user := &User{
        Name: name,
    }
    for _, opt := range opts {
        opt(user)
    }
    return user
}
func WithAge(age int) UserOption {
    returnfunc(user *User) {
        user.Age = age
    }
}
func WithGender(gender string) UserOption {
    returnfunc(user *User) {
        user.Gender = gender
    }
}

optioner 工具將會生成一個名為 opt_xxx_gen.go 的文件,其中 xxx 是結(jié)構(gòu)體的名稱,例如 opt_user_gen.go。該文件包含生成的函數(shù)選項代碼,用于初始化結(jié)構(gòu)體和設置結(jié)構(gòu)體字段的值。

小結(jié)

在本文中,我介紹了 go-opioner 開源工具的安裝和使用,它能夠根據(jù)結(jié)構(gòu)體的定義,自動生成函數(shù)選項模式的代碼。它讓我們告別繁瑣的構(gòu)造函數(shù)編寫和修改,讓代碼編寫過程更加高效和愉悅。

到此這篇關于Go開發(fā)go-optioner工具實現(xiàn)輕松生成函數(shù)選項模式代碼的文章就介紹到這了,更多相關Go go-optioner內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go語言LeetCode500鍵盤行題解示例詳解

    Go語言LeetCode500鍵盤行題解示例詳解

    這篇文章主要為大家介紹了Go語言LeetCode500鍵盤行題解示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Go基礎教程系列之回調(diào)函數(shù)和閉包詳解

    Go基礎教程系列之回調(diào)函數(shù)和閉包詳解

    這篇文章主要介紹了Go基礎教程系列之回調(diào)函數(shù)和閉包詳解,需要的朋友可以參考下
    2022-04-04
  • go語言簡單的處理http請求的函數(shù)實例

    go語言簡單的處理http請求的函數(shù)實例

    這篇文章主要介紹了go語言簡單的處理http請求的函數(shù),實例分析了Go語言處理http請求的技巧,需要的朋友可以參考下
    2015-03-03
  • 利用Go語言實現(xiàn)Raft日志同步

    利用Go語言實現(xiàn)Raft日志同步

    這篇文章主要為大家詳細介紹了如何利用Go語言實現(xiàn)Raft日志同步,文中的示例代碼講解詳細,對我們深入了解Go語言有一定的幫助,需要的可以參考一下
    2023-05-05
  • golang 數(shù)組隨機排序的實現(xiàn)

    golang 數(shù)組隨機排序的實現(xiàn)

    本文主要介紹了golang 數(shù)組隨機排序的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • golang實現(xiàn)枚舉的幾種方式

    golang實現(xiàn)枚舉的幾種方式

    在Go語言中,雖沒有內(nèi)置枚舉類型,但可通過常量、結(jié)構(gòu)體或自定義類型和方法實現(xiàn)枚舉功能,這些方法提高了代碼的可讀性和維護性,避免了魔法數(shù)字的使用,感興趣的可以了解一下
    2024-09-09
  • Golang性能優(yōu)化的技巧分享

    Golang性能優(yōu)化的技巧分享

    性能優(yōu)化的前提是滿足正確可靠、簡潔清晰等質(zhì)量因素,針對?Go語言特性,本文為大家整理了一些Go語言相關的性能優(yōu)化建議,感興趣的可以了解一下
    2023-07-07
  • Go實現(xiàn)Redis連接池方法

    Go實現(xiàn)Redis連接池方法

    為了更深入了解golang連接池的實現(xiàn),自已又重寫了一遍連接池。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Golang中的深拷貝與淺拷貝使用

    Golang中的深拷貝與淺拷貝使用

    本文主要介紹了Golang中的深拷貝與淺拷貝使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 使用golang實現(xiàn)在屏幕上打印進度條的操作

    使用golang實現(xiàn)在屏幕上打印進度條的操作

    這篇文章主要介紹了使用golang實現(xiàn)在屏幕上打印進度條的操作,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論