gotool

package
v0.1.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 14, 2025 License: Apache-2.0 Imports: 17 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrGoWorkNotFound = fmt.Errorf("go.work not found")

Functions

func FindGoWorkspaceRoot added in v0.1.5

func FindGoWorkspaceRoot(dir string) (string, error)

FindGoWorkspaceRoot 查找并返回Go工作区的根目录

func FindModuleGoVersion added in v0.1.3

func FindModuleGoVersion(dir string) (string, error)

FindModuleGoVersion 获取模块的Go版本

func FindModuleRoot added in v0.1.5

func FindModuleRoot(dir string) (string, error)

FindModuleRoot 查找模块根目录

func FormatAndCleanGoFile

func FormatAndCleanGoFile(filePath string) error

FormatAndCleanGoFile 格式化Go文件并移除未使用的导入

func FormatAndCleanGoSrc added in v0.1.3

func FormatAndCleanGoSrc(src []byte) ([]byte, error)

FormatAndCleanGoSrc 格式化Go源码并移除未使用的导入

func GetModuleNameFromDir

func GetModuleNameFromDir(dir string) (string, error)

GetModuleNameFromDir 从指定目录获取模块名称

func GoFmt added in v0.1.5

func GoFmt(packages string, opts ...GoFmtOption) error

GoFmt 格式化指定包 如果 packages 为空,则格式化当前目录下的所有go文件

func GoGenerate added in v0.1.5

func GoGenerate(packages string, opts ...GoGenerateOption) error

GoGenerate 生成指定包

func GoGet added in v0.1.3

func GoGet(repo string, opts ...GoGetOption) error

GoGet 获取指定包 如果 projectDir 为空,则使用当前目录 如果 updateDependencies 为 true,则更新依赖 如果 updateDependencies 为 false,则不更新依赖

func GoInstall added in v0.1.3

func GoInstall(repo string, opts ...GoInstallOption) error

GoInstall 安装指定包

func GoModTidy added in v0.1.3

func GoModTidy(opts ...GoModTidyOption) error

GoModTidy 整理go.mod文件

func ImportPathForDir

func ImportPathForDir(dir string) (string, error)

ImportPathForDir 获取指定目录的import path

func InsertAfterConst added in v0.1.3

func InsertAfterConst(src []byte, content, constName string) ([]byte, error)

InsertAfterConst 用Go AST解析在指定常量后插入内容

func InsertAfterStruct added in v0.1.3

func InsertAfterStruct(src []byte, content, structName string) ([]byte, error)
  type MyStruct struct {Name string}
	`)

	    newSrc, err := InsertAfterStruct(src, "type MyStruct2 struct {Name string}", "MyStruct")
	    if err != nil {
	        log.Fatal(err)
	    }

	    fmt.Println(string(newSrc))
	}

func InsertAfterStructMethod added in v0.1.3

func InsertAfterStructMethod(src []byte, content, structName, methodName string) ([]byte, error)
  type MyStruct struct {Name string}
	`)

	    newSrc, err := InsertAfterStructMethod(src, "func (m *MyStruct) MyMethod() {fmt.Println(\"Hello, World!\")}", "MyStruct", "MyMethod")
	    if err != nil {
	        log.Fatal(err)
	    }

	    fmt.Println(string(newSrc))
	}

func InsertAfterVar added in v0.1.3

func InsertAfterVar(src []byte, content, varName string) ([]byte, error)

InsertAfterVar 用Go AST解析在指定变量后插入内容

func InsertBeforeConst added in v0.1.3

func InsertBeforeConst(src []byte, content, constName string) ([]byte, error)

InsertBeforeConst 用Go AST解析在指定常量前插入内容

func InsertBeforeStruct added in v0.1.3

func InsertBeforeStruct(src []byte, content, structName string) ([]byte, error)
  type MyStruct struct {Name string}
	`)

	    newSrc, err := InsertBeforeStruct(src, "type MyStruct2 struct {Name string}", "MyStruct")
	    if err != nil {
	        log.Fatal(err)
	    }

	    fmt.Println(string(newSrc))
	}

func InsertBeforeStructMethod added in v0.1.3

func InsertBeforeStructMethod(src []byte, content, structName, methodName string) ([]byte, error)
  type MyStruct struct {Name string}
	`)

	    newSrc, err := InsertBeforeStructMethod(src, "func (m *MyStruct) MyMethod() {fmt.Println(\"Hello, World!\")}", "MyStruct", "MyMethod")
	    if err != nil {
	        log.Fatal(err)
	    }

	    fmt.Println(string(newSrc))
	}

func InsertBeforeVar added in v0.1.3

func InsertBeforeVar(src []byte, content, varName string) ([]byte, error)

InsertBeforeVar 用Go AST解析在指定变量前插入内容

func InsertCommentAfterImportBlock added in v0.1.3

func InsertCommentAfterImportBlock(src []byte, comment string) ([]byte, error)

InsertCommentAfterImportBlock 用Go AST解析在指定导入块后插入comment 使用示例

func main() {
    src := []byte(`package main

import "fmt"
`)

    newSrc, err := InsertCommentAfterImportBlock(src, "这是一个注释 \n 这是一个注释")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func InsertCommentBeforeImportBlock added in v0.1.3

func InsertCommentBeforeImportBlock(src []byte, comment string) ([]byte, error)

InsertCommentBeforeImportBlock 用Go AST解析在指定导入块前插入comment src: 源代码的字节切片 comment: 要插入的comment 返回修改后的源码字节切片和可能的错误 使用示例

func main() {
    src := []byte(`package main

import "fmt"
`)

    newSrc, err := InsertCommentBeforeImportBlock(src, "// 这是一个注释")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func InsertConst added in v0.1.3

func InsertConst(src []byte, constName, constType, constValue string) ([]byte, error)

InsertConst 使用 Go AST 解析在源码中插入一个新的常量 src: 源代码的字节切片 constName: 常量名称 constType: 常量类型(可选) constValue: 常量值 返回修改后的源码字节切片和可能的错误 使用示例:

func main() {
    src := []byte(`package main

const existingConst = "existing value"
`)

    newSrc, err := InsertConst(src, "newConst", "int", "42")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func InsertContentAfterFunction added in v0.1.3

func InsertContentAfterFunction(src []byte, content, functionName string) ([]byte, error)

InsertContentAfterFunction 用Go AST解析在指定函数后插入内容 src: 源代码的字节切片 content: 要插入的内容 functionName: 要插入的函数名 返回修改后的源码字节切片和可能的错误 使用示例

func main() {
    src := []byte(`package main

import "fmt"
`)

    newSrc, err := InsertContentAfterFunction(src, "func myfunc() {fmt.Println(\"Hello, World!\")}", "main")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func InsertContentBeforeFunction added in v0.1.3

func InsertContentBeforeFunction(src []byte, content, functionName string) ([]byte, error)

InsertContentBeforeFunction 用Go AST解析在指定函数前插入内容 src: 源代码的字节切片 content: 要插入的内容 functionName: 要插入的函数名 返回修改后的源码字节切片和可能的错误 使用示例

func main() {
    src := []byte(`package main

import "fmt"
`)

    newSrc, err := InsertContentBeforeFunction(src, "func myfunc() {fmt.Println(\"Hello, World!\")}", "main")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func InsertFunction added in v0.1.3

func InsertFunction(src []byte, functionName, params, results, functionBody string) ([]byte, error)

InsertFunction 使用 Go AST 解析在源码中插入一个新的函数 src: 源代码的字节切片 functionName: 要插入的函数名 params: 函数参数列表,格式为 "name type, name type" results: 函数返回值列表,格式为 "type, type" functionBody: 函数体的字符串表示 返回修改后的源码字节切片和可能的错误 使用示例:

func main() {
    src := []byte(`package main

func existingFunction(a int, b string) (int, string) {
    return a + 1, b + "!"
}
`)

    newSrc, err := InsertFunction(src, "newFunction", "a int, b string", "int, string", "return a + 1, b + \"!\"")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func InsertImport added in v0.1.3

func InsertImport(src []byte, importPath, alias string) ([]byte, error)

InsertImport 使用 Go AST 解析在源码中插入一个新的Import src: 源代码的字节切片 importPath: 要插入的导入路径 alias: 导入路径的别名(可选) 返回修改后的源码字节切片和可能的错误 使用示例

func main() {
    src := []byte(`package main

import "fmt"
`)

    newSrc, err := InsertImport(src, "io", "")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func InsertStruct added in v0.1.3

func InsertStruct(src []byte, structName string) ([]byte, error)

InsertStruct 使用 Go AST 解析在源码中插入一个新的空结构体 src: 源代码的字节切片 structName: 要插入的结构体名称 返回修改后的源码字节切片和可能的错误 使用示例

func main() {
    src := []byte(`package main

type MyStruct struct {}
`)

    newSrc, err := InsertStruct(src, "MyStruct")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func InsertStructField added in v0.1.3

func InsertStructField(src []byte, structName, fieldName, fieldType, tag string) ([]byte, error)

InsertStructField 使用 Go AST 解析在源码中插入一个新的结构体字段 src: 源代码的字节切片 structName: 结构体名称 fieldName: 要插入的字段名 fieldType: 字段的类型 tag: 字段的标签(可选) 返回修改后的源码字节切片和可能的错误

func InsertStructMethod added in v0.1.3

func InsertStructMethod(src []byte, structName, methodName, methodBody, receiverName string, usePointerReceiver bool) ([]byte, error)

InsertStructMethod 使用 Go AST 解析在源码中插入一个新的结构体方法 src: 源代码的字节切片 structName: 结构体名称 methodName: 要插入的方法名 methodBody: 方法体的字符串表示 receiverName: 接收者名称(可选) usePointerReceiver: 是否使用指针接收者(可选) 返回修改后的源码字节切片和可能的错误

func InsertVar added in v0.1.3

func InsertVar(src []byte, varName, varType, varValue string) ([]byte, error)

InsertVar 使用 Go AST 解析在源码中插入一个新的变量 src: 源代码的字节切片 varName: 变量名称 varType: 变量类型(可选) varValue: 变量值(可选) 返回修改后的源码字节切片和可能的错误

使用示例:

func main() {
    src := []byte(`package main

var existingVar = "existing value"
`)

    newSrc, err := InsertVar(src, "newVar", "int", "42")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func IsConstExists added in v0.1.3

func IsConstExists(src []byte, constName string) (bool, error)

IsConstExists 使用 Go AST 解析来检查源码中是否存在指定的常量

func IsFunctionExists added in v0.1.3

func IsFunctionExists(src []byte, functionName string) (bool, error)

IsFunctionExists 使用 Go AST 解析来检查源码中是否存在指定的函数

func IsGoWorkspace added in v0.1.5

func IsGoWorkspace(dir string) (bool, error)

IsGoWorkspace 判断是否是Go工作区

func IsInterfaceExists added in v0.1.3

func IsInterfaceExists(src []byte, interfaceName string) (bool, error)

IsInterfaceExists 使用 Go AST 解析来检查源码中是否存在指定的接口

func IsStructExists added in v0.1.3

func IsStructExists(src []byte, structName string) (bool, error)

IsStructExists 使用 Go AST 解析来检查源码中是否存在指定的结构体

func IsStructMethodExists added in v0.1.3

func IsStructMethodExists(src []byte, structName, methodName string) (bool, error)

IsStructMethodExists 使用 Go AST 解析来检查指定结构体类型是否存在指定方法

func IsTypeExists added in v0.1.3

func IsTypeExists(src []byte, typeName string) (bool, error)

IsTypeExists 使用 Go AST 解析来检查源码中是否存在指定的类型

func IsVarExists added in v0.1.3

func IsVarExists(src []byte, varName string) (bool, error)

IsVarExists 使用 Go AST 解析来检查源码中是否存在指定的变量

func NameForDir

func NameForDir(dir string) (string, error)

NameForDir 获取指定目录的名称,并确保符合Go包名规范

func NormalizeVendor

func NormalizeVendor(pkgPath string) string

NormalizeVendor 将带有 vendor 的包路径转换为正常路径

func ParseGoWork added in v0.1.5

func ParseGoWork(dir string) (*modfile.WorkFile, error)

ParseGoWork 解析go.work文件

func RemoveConst added in v0.1.3

func RemoveConst(src []byte, constName string) ([]byte, error)

RemoveConst 使用 Go AST 解析从源码中移除指定的常量 src: 源代码的字节切片 constName: 要移除的常量名称 返回修改后的源码字节切片和可能的错误 使用示例:

func main() {
    src := []byte(`package main

const existingConst = "existing value"
`)

    newSrc, err := RemoveConst(src, "existingConst")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(newSrc))
}

func RemoveImport added in v0.1.3

func RemoveImport(src []byte, importPath string) ([]byte, error)

RemoveImport 使用 Go AST 解析从源码中移除指定的导入 src: 源代码的字节切片 importPath: 要移除的导入路径 返回修改后的源码字节切片和可能的错误

func RemoveStruct added in v0.1.3

func RemoveStruct(src []byte, structName string) ([]byte, error)

RemoveStruct 使用 Go AST 解析从源码中移除指定的结构体包括方法 src: 源代码的字节切片 structName: 要移除的结构体名称 返回修改后的源码字节切片和可能的错误

func RemoveStructField added in v0.1.3

func RemoveStructField(src []byte, structName, fieldName string) ([]byte, error)

RemoveStructField 使用 Go AST 解析从源码中移除指定的结构体字段 src: 源代码的字节切片 structName: 结构体名称 fieldName: 要移除的字段名 返回修改后的源码字节切片和可能的错误

func RemoveUnusedImports

func RemoveUnusedImports(src []byte) ([]byte, error)

RemoveUnusedImports 从指定的Go文件中移除未使用的包引入

func RemoveUnusedImportsByFile added in v0.1.3

func RemoveUnusedImportsByFile(filePath string) error

RemoveUnusedImportsByFile 从指定文件中移除未使用的导入

func RemoveVar added in v0.1.3

func RemoveVar(src []byte, varName string) ([]byte, error)

RemoveVar 使用 Go AST 解析从源码中移除指定的变量 src: 源代码的字节切片 varName: 要移除的变量名称 返回修改后的源码字节切片和可能的错误

Types

type GoFmtOption added in v0.1.5

type GoFmtOption func(opts *goFmtOptions)

func WithGoFmtDir added in v0.1.5

func WithGoFmtDir(dir string) GoFmtOption

WithGoFmtDir 设置工作目录

func WithGoFmtEnv added in v0.1.5

func WithGoFmtEnv(env []string) GoFmtOption

WithGoFmtEnv 设置环境变量

func WithGoFmtN added in v0.1.5

func WithGoFmtN(n bool) GoFmtOption

WithGoFmtN 设置是否使用-n选项

func WithGoFmtStderr added in v0.1.5

func WithGoFmtStderr(stderr io.Writer) GoFmtOption

WithGoFmtStderr 设置错误输出

func WithGoFmtStdout added in v0.1.5

func WithGoFmtStdout(stdout io.Writer) GoFmtOption

WithGoFmtStdout 设置标准输出

func WithGoFmtX added in v0.1.5

func WithGoFmtX(x bool) GoFmtOption

WithGoFmtX 设置是否使用-x选项

type GoGenerateOption added in v0.1.5

type GoGenerateOption func(opts *goGenerateOptions)

func WithGoGenerateDir added in v0.1.5

func WithGoGenerateDir(dir string) GoGenerateOption

WithGoGenerateDir 设置工作目录

func WithGoGenerateEnv added in v0.1.5

func WithGoGenerateEnv(env []string) GoGenerateOption

WithGoGenerateEnv 设置环境变量

func WithGoGenerateN added in v0.1.5

func WithGoGenerateN(n bool) GoGenerateOption

WithGoGenerateN 设置是否使用-n选项

func WithGoGenerateRun added in v0.1.5

func WithGoGenerateRun(run string) GoGenerateOption

WithGoGenerateRun 设置是否使用-run选项

func WithGoGenerateStderr added in v0.1.5

func WithGoGenerateStderr(stderr io.Writer) GoGenerateOption

WithGoGenerateStderr 设置错误输出

func WithGoGenerateStdout added in v0.1.5

func WithGoGenerateStdout(stdout io.Writer) GoGenerateOption

WithGoGenerateStdout 设置标准输出

func WithGoGenerateTimeout added in v0.1.5

func WithGoGenerateTimeout(timeout time.Duration) GoGenerateOption

WithGoGenerateTimeout 设置超时时间

func WithGoGenerateV added in v0.1.5

func WithGoGenerateV(v bool) GoGenerateOption

WithGoGenerateV 设置是否使用-v选项

func WithGoGenerateX added in v0.1.5

func WithGoGenerateX(x bool) GoGenerateOption

WithGoGenerateX 设置是否使用-x选项

type GoGetOption added in v0.1.3

type GoGetOption func(opts *goGetOptions)

func WithGoGetDir added in v0.1.3

func WithGoGetDir(dir string) GoGetOption

func WithGoGetEnv added in v0.1.3

func WithGoGetEnv(env []string) GoGetOption

func WithGoGetStderr added in v0.1.3

func WithGoGetStderr(stderr io.Writer) GoGetOption

func WithGoGetStdout added in v0.1.3

func WithGoGetStdout(stdout io.Writer) GoGetOption

func WithGoGetUpdateDependencies added in v0.1.3

func WithGoGetUpdateDependencies(updateDependencies bool) GoGetOption

type GoInstallOption added in v0.1.3

type GoInstallOption func(opts *goInstallOptions)

func WithGoInstallDir added in v0.1.3

func WithGoInstallDir(dir string) GoInstallOption

WithGoInstallDir 设置工作目录

func WithGoInstallEnv added in v0.1.3

func WithGoInstallEnv(env []string) GoInstallOption

WithGoInstallEnv 设置环境变量

func WithGoInstallStderr added in v0.1.3

func WithGoInstallStderr(stderr io.Writer) GoInstallOption

WithGoInstallStderr 设置错误输出

func WithGoInstallStdout added in v0.1.3

func WithGoInstallStdout(stdout io.Writer) GoInstallOption

WithGoInstallStdout 设置标准输出

type GoModTidyOption added in v0.1.3

type GoModTidyOption func(opts *goModTidyOptions)

func WithGoModTidyDir added in v0.1.3

func WithGoModTidyDir(dir string) GoModTidyOption

WithGoModTidyDir 设置工作目录

func WithGoModTidyEnv added in v0.1.3

func WithGoModTidyEnv(env []string) GoModTidyOption

WithGoModTidyEnv 设置环境变量

func WithGoModTidyStderr added in v0.1.3

func WithGoModTidyStderr(stderr io.Writer) GoModTidyOption

WithGoModTidyStderr 设置错误输出

func WithGoModTidyStdout added in v0.1.3

func WithGoModTidyStdout(stdout io.Writer) GoModTidyOption

WithGoModTidyStdout 设置标准输出

func WithGoModTidyTimeout added in v0.1.3

func WithGoModTidyTimeout(timeout time.Duration) GoModTidyOption

WithGoModTidyTimeout 设置超时时间

type Import added in v0.1.7

type Import struct {
	Name  string
	Path  string
	Alias string
}

Import 表示一个 Go 包导入,带有一个可选的别名。

func (*Import) String added in v0.1.7

func (i *Import) String() string

String 返回格式化的导入语句。

type Imports added in v0.1.7

type Imports struct {
	// contains filtered or unexported fields
}

Imports 管理 Import 实例的集合。

func NewImports added in v0.1.7

func NewImports(destDir string) *Imports

NewImports 创建一个新的 Imports 实例。

func (*Imports) Lookup added in v0.1.7

func (s *Imports) Lookup(path string) string

Lookup 查找或添加一个导入路径并返回其别名。

func (*Imports) Reserve added in v0.1.7

func (s *Imports) Reserve(path string, aliases ...string) error

Reserve 保留一个带有可选别名的导入路径。

func (*Imports) String added in v0.1.7

func (s *Imports) String() string

String 返回所有导入格式化为单个字符串。

type Package added in v0.1.7

type Package struct {
	// contains filtered or unexported fields
}

func NewPackage added in v0.1.7

func NewPackage() *Package

func (*Package) AddBuildTags added in v0.1.7

func (p *Package) AddBuildTags(tags ...string) *Package

func (*Package) ClearCache added in v0.1.7

func (p *Package) ClearCache()

func (*Package) GetPackageName added in v0.1.7

func (p *Package) GetPackageName(importPath string) (string, error)

func (*Package) LoadPackage added in v0.1.7

func (p *Package) LoadPackage(importPath string) (*packages.Package, error)

func (*Package) LoadPackages added in v0.1.7

func (p *Package) LoadPackages(importPaths ...string) ([]*packages.Package, error)

func (*Package) PackageCount added in v0.1.7

func (p *Package) PackageCount() int

func (*Package) RunModTidy added in v0.1.7

func (p *Package) RunModTidy() error

func (*Package) SetPackageCachePrefix added in v0.1.7

func (p *Package) SetPackageCachePrefix(prefix string) *Package

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL