网站首页 > 文章中心 > 其它

如何用go语言运行脚本

作者:小编 更新时间:2023-10-05 08:53:10 浏览量:386人看过

Go语言命令行利器cobra使用教程

cobra是一个提供简单接口来创建强大的现代CLI界面的库类似git git tools,cobra也是一个应用程序,它会生成你的应用程序的脚手架来快速开发基于cobra的应用程序

如何用go语言运行脚本-图1

cobra提供:

cobra建立在命令、参数、标志的结构之上

commands代表动作,args是事物,flags是动作的修饰符

最好的应用程序在使用时读起来就像句子,所以呢,用户直观地知道如何与它们交互

模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 动词 名词 形容词 或者 APPNAME 命令 参数 标志)

一些真实世界的好例子可以更好地说明这一点

kubectl 命令更能体现APPNAME 动词 名词 形容词

如下的例子,server 是command,port是flag

这个命令中,我们告诉git 克隆url

命令是应用程序的中心点,应用程序支持的每一个交互都包含在一个命令中,命令可以有子命令,也可以运行操作

在上面的例子中,server是命令

如何用go语言运行脚本-图2

更多关于cobra.Command

flag是一种修改命令行为的方式,cobra支持完全兼容POSIX标志,也支持go flag package,cobra可以定义到子命令上的标志,也可以仅对该命令可用的标志

在上面的命令中,port是标志

标志的功能由 pflag library 提供,pflag library是flag标准库的一个分支,在添加POSIX兼容性的同时维护相同的接口.

使用cobra很简单,首先,使用go get按照最新版本的库,这个命令会安装cobra可执行程序以及库和依赖项

下一步,引入cobra到应用程序中

虽然欢迎您提供自己的组织,但通常基于Cobra的应用程序将遵循以下组织结构:

在Cobra应用程序中,main.go文件通常非常简单.它有一个目的:初始化Cobra.

使用cobra生成器

cobra提供了程序用来创建你的应用程序然后添加你想添加的命令,这是将cobra引入应用程序最简单的方式

这儿 你可以发现关于cobra的更多信息

要手动实现cobra,需要创建一个main.go 和rootCmd文件,可以根据需要提供其他命令

Cobra不需要任何特殊的构造器.只需创建命令.

理想情况下,您可以将其放在app/cmd/root.go中:

在init()函数中定义标志和处理配置

例子如下,cmd/root.go:

创建main.go

使用root命令,您需要让主函数执行它.为清楚起见,Execute应该在根目录下运行,尽管它可以在任何命令上调用.

可以定义其他命令,通常每个命令在cmd/目录中都有自己的文件.

如果要创建版本命令,可以创建cmd/version.go并用以下内容填充它:

如果希望将错误返回给命令的调用者,可以使用RunE.

然后可以在execute函数调用中捕获错误.

标志提供修饰符来控制操作命令的操作方式.

由于标志是在不同的位置定义和使用的,所以呢我们需要在外部定义一个具有正确作用域的变量来分配要使用的标志.

有两种不同的方法来分配标志.

标志可以是"持久"的,这意味着该标志将可用于分配给它的命令以及该命令下的每个命令.对于全局标志,在根上指定一个标志作为持久标志.

也可以在本地分配一个标志,该标志只应用于该特定命令.

默认情况下,Cobra只解析目标命令上的本地标志,而忽略父命令上的任何本地标志.通过启用Command.TraverseChildren,Cobra将在执行目标命令之前解析每个命令上的本地标志.

使用viper绑定标志

在本例中,持久标志author与viper绑定.注意:当用户未提供--author标志时,变量author将不会设置为config中的值.

更多关于 viper的文档

Flags默认是可选的,如果希望命令在未设置标志时报告错误,请根据需要进行标记:

持久性Flags

可以使用命令的Args字段指定位置参数的验证.

内置了以下验证器:

在下面的示例中,我们定义了三个命令.两个是顶级命令,一个(cmdTimes)是顶级命令之一的子命令.在这种情况下,根是不可执行的,这意味着需要一个子命令.这是通过不为"rootCmd"提供"Run"来实现的.

我们只为一个命令定义了一个标志.

有关标志的更多文档,请访问

对于一个更完整的例子更大的应用程序,请检查 Hugo .

当您有子命令时,Cobra会自动将help命令添加到应用程序中.当用户运行"应用程序帮助"时,将调用此函数.此外,help还支持所有其他命令作为输入.例如,您有一个名为"create"的命令,没有任何附加配置;调用"app help create"时,Cobra将起作用.每个命令都会自动添加"-help"标志.

以下输出由Cobra自动生成.除了命令和标志定义之外,不需要任何东西.

帮助就像其他命令一样.它周围没有特殊的逻辑或行为.事实上,你可以提供你想提供的.

您可以为默认命令提供自己的帮助命令或模板,以用于以下功能:

当用户提供无效的标志或无效的命令时,Cobra通过向用户显示"用法"来响应.

你可以从上面的帮助中认识到这一点.这是因为默认帮助将用法作为其输出的一部分嵌入.

您可以提供自己的使用函数或模板供Cobra使用.与帮助一样,函数和模板也可以通过公共方法重写:

如果在root命令上设置了version字段,Cobra会添加一个顶级的'--version'标志.运行带有"-version"标志的应用程序将使用版本模板将版本打印到标准输出.可以使用cmd.SetVersionTemplate(s string)函数自定义模板.

可以在命令的主运行函数之前或之后运行函数.PersistentPreRun和PreRun函数将在运行之前执行.PersistentPostRun和PostRun将在运行后执行.如果子函数不声明自己的函数,则它们将继承Persistent*Run函数.这些函数按以下顺序运行:

输出:

当发生"未知命令"错误时,Cobra将打印自动建议.这使得Cobra在发生拼写错误时的行为类似于git命令.例如:

如果需要在命令中禁用建议或调整字符串距离,请使用:

or

您还可以使用SuggestFor属性显式设置将为其建议给定命令的名称.这允许对在字符串距离方面不接近的字符串提供建议,但在您的一组命令中是有意义的,并且对于某些您不需要别名的字符串.例子:

Cobra可以基于子命令、标志等生成文档.请在 docs generation文档 中阅读更多关于它的信息.

Cobra可以为以下shell生成shell完成文件:bash、zsh、fish、PowerShell.如果您在命令中添加更多信息,这些补全功能将非常强大和灵活.在 Shell Completions 中阅读更多关于它的信息.

GO语言(三十):访问关系型数据库(上)

本教程介绍了使用 Godatabase/sql及其标准库中的包访问关系数据库的基础知识.

您将使用的database/sql包包括用于连接数据库、执行事务、取消正在进行的操作等的类型和函数.

在本教程中,您将创建一个数据库,然后编写代码来访问该数据库.您的示例项目将是有关老式爵士乐唱片的数据存储库.

首先,为您要编写的代码创建一个文件夹.

①.、打开命令提示符并切换到您的主目录.

在 Linux 或 Mac 上:

在 Windows 上:

运行go mod init命令,为其提供新代码的模块路径.

此命令创建一个 go.mod 文件,您添加的依赖项将在其中列出以供跟踪.

注意: 在实际开发中,您会指定一个更符合您自己需求的模块路径.有关更多信息,请参阅一下文章.

GO语言(二十五):管理依赖项(上)

GO语言(二十六):管理依赖项(中)

GO语言(二十七):管理依赖项(下)

此时此刻呢,您将创建一个数据库.

在此步骤中,您将创建要使用的数据库.您将使用 DBMS 本身的 CLI 创建数据库和表,以及添加数据.

您将创建一个数据库,其中包含有关黑胶唱片上的老式爵士乐录音的数据.

这里的代码使用MySQL CLI,但大多数 DBMS 都有自己的 CLI,具有类似的功能.

①.、打开一个新的命令提示符.

在命令行,登录到您的 DBMS,如下面的 MySQL 示例所示.

将以下 SQL 代码粘贴到文件中,然后保存文件.

在此 SQL 代码中:

(1)删除名为album表. 首先执行此命令可以让您更轻松地稍后重新运行脚本.

您将使用以下形式的source命令:

此时此刻呢,您将编写一些 Go 代码进行连接,以便进行查询.

现在你已经有了一个包含一些数据的数据库,开始你的 Go 代码.

找到并导入一个数据库驱动程序,该驱动程序会将您通过database/sql包中的函数发出的请求转换为数据库可以理解的请求.

①.、在您的浏览器中,访问SQLDrivers wiki 页面以识别您可以使用的驱动程序.

在此代码中:

(1)将您的代码添加到main包中,以便您可以独立执行它.

导入驱动程序后,您将开始编写代码以访问数据库.

现在编写一些 Go 代码,让您使用数据库句柄访问数据库.

您将使用指向结构的指针sql.DB,它表示对特定数据库的访问.

编写代码

①.、进入 main.go,在import您刚刚添加的代码下方,粘贴以下 Go 代码以创建数据库句柄.

该Config结构使代码比连接字符串更容易阅读.

为了简化代码,您调用log.Fatal结束执行并将错误打印到控制台.在生产代码中,您会希望以更优雅的方式处理错误.

文件的顶部现在应该如下所示:

①.、开始跟踪 MySQL 驱动程序模块作为依赖项.

使用go get 添加 github.com/go-sql-driver/mysql 模块作为您自己模块的依赖项.使用点参数表示"获取当前目录中代码的依赖项".

连接成功了!

此时此刻呢,您将查询一些数据.

如何使用go语言来运行PHP

Apache / Nginx 好好的为什么要用 Go 重写?

你要达到什么目的?

如果网站的主要部分还是 PHP,其中 PHP 脚本需要用到某些其它功能,听起来应该是:要么写个服务(HTTP / Thrift / ...)从 PHP 里调用,要么写个 PHP 扩展提供几个模块函数接口给 PHP 脚本直接调用.第一个效率较低但是实现方便灵活性高,Golang 确定没问题;第二个调用效率较高,实现较难,不确定 Golang 可以做到.

go语言怎么调用shell脚本文件

求用go语言编写的统计脚本

package main

import (

"fmt"

"os"

)

func main() {

fmt.Println("Please Input File Name!")

return

}

file, err := os.Open(os.Args[1])

if err != nil {

buff := make([]byte, 1000)

_, err = file.Read(buff)

a, c, d, e, _ := Sum(buff)

fmt.Printf("a c d e \n%d %d %d %d\n", a, c, d, e)

func Sum(buff []byte) (a, c, d, e, def int) {

for i := 0; i len(buff); i++ {

switch buff[i] {

case 'a':

a++

case 'c':

c++

case 'd':

d++

case 'e':

e++

default:

def++

如何使用Go语言实现远程执行命令

一般命令

所谓一般命令,就是在一定时间内会执行完的命令.比如 grep, cat 等等. 执行命令的步骤是:连接,执行,获取结果

连接

"time"

"golang.org/x/crypto/ssh"

func connect(user, password, host string, port int) (*ssh.Session, error) {

var (

auth []ssh.AuthMethod

addr string

clientConfig *ssh.ClientConfig

client *ssh.Client

session *ssh.Session

err error

// get auth method

auth = make([]ssh.AuthMethod, 0)

auth = append(auth, ssh.Password(password))

clientConfig = ssh.ClientConfig{

User: user,

Auth: auth,

// connet to ssh

addr = fmt.Sprintf("%s:%d", host, port)

if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {

return nil, err

// create session

if session, err = client.NewSession(); err != nil {

return session, nil

连接的方法很简单,只要提供登录主机的 用户*, *密码*, *主机名或者IP*, *SSH端口

执行,命令获取结果

连接成功后,执行命令很简单

"log"

log.Fatal(err)

defer session.Close()

session.Run("ls /; ls /abc")

上面代码运行之后,虽然命令正常执行了,但是没有正常输出的结果,也没有异常输出的结果. 要想显示结果,需要将 session 的 Stdout 和 Stderr 重定向 修改 func main 为如下:

session.Stdout = os.Stdout

session.Stderr = os.Stderr

这样就能在屏幕上显示正常,异常的信息了.

交互式命令

fd := int(os.Stdin.Fd())

oldState, err := terminal.MakeRaw(fd)

panic(err)

defer terminal.Restore(fd, oldState)

// excute command

session.Stdin = os.Stdin

termWidth, termHeight, err := terminal.GetSize(fd)

// Set up terminal modes

modes := ssh.TerminalModes{

ssh.ECHO: 1, // enable echoing

// Request pseudo terminal

session.Run("top")

以上就是土嘎嘎小编为大家整理的如何用go语言运行脚本相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章