go generate命令有啥作用呢?


go generate命令其實就是用來生成代碼用的,一般情況下需要配置其他工具和庫一起使用
go官網有個實例:

painkiller.go

package painkiller
 
type Pill int

const (

    Placebo Pill = iota

    Aspirin

    Ibuprofen

    Paracetamol

    Acetaminophen = Paracetamol

)

假設我們現在需要為painkiller.go 中的常量添加String方法,我們可以這樣寫

func (p Pill) String() string {

    switch p {

    case Placebo:

        return "Placebo"

    case Aspirin:

        return "Aspirin"

    case Ibuprofen:

        return "Ibuprofen"

    case Paracetamol: // == Acetaminophen

        return "Paracetamol"

    }

    return fmt.Sprintf("Pill(%d)", p)

}

如果我們用go generate 來自動化生成代碼呢?

在 painkiller.go 最開頭處添加

//go:generate stringer -type=Pill

因為要用到工具stringer,所以我們通過命令安裝

go get golang.org/x/tools/cmd/stringer

然后在painkiller目錄執行go generate,會生成一個pill_string.go的文件:

// Code generated by "stringer -type=Pill"; DO NOT EDIT.

package painkiller

import "strconv"

const _Pill_name = "PlaceboAspirinIbuprofenParacetamol"

var _Pill_index = [...]uint8{0, 7, 14, 23, 34}

func (i Pill) String() string {
	if i < 0 || i >= Pill(len(_Pill_index)-1) {
		return "Pill(" + strconv.FormatInt(int64(i), 10) + ")"
	}
	return _Pill_name[_Pill_index[i]:_Pill_index[i+1]]
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM