golang 自定义命令行flag包简单使用

2023-11-03

一、为什么需要使用golang自定义命令行

        不恰当的比喻,当我们写了一个服务代码后,按照简单的思维,我们会在业务代码中将要连接的数据库 用户名、主机名、端口号、密码写死。 那么也就意味着我们启动该服务后都只能固定连接某一个数据库,而如果我们将这些参数不用写死,通过启动服务命令行参数进行临时分配,那么我们也就不用去更改业务代码重新编译去执行了。

         题外话:当然,除了自定义命令行来进行临时分配外,我们也可以通过在服务的业务代码中,实现在服务启动时,先去对应的配置文件中读取相关参数进行分配要连接的数据库,当然,我们要明白的是,golang的配置文件在代码编译的时候不会被编译进去。所以我们可以在运行编译好的服务源代码前修改跟随的配置文件。

二、golang自定义命令行参数如何实现

        golang官方其实已经内置了flag包,让我们很方便的定义命令行参数。

        简单的使用案列: 启动服务时,通过命令行给定某个用户的相关信息。

package main

import (
	"flag"
	"fmt"
)


func main() {
	//定义变量
	var (
		name, sex, hobby string
		age int
	)

	// StringVar函数 四个参数
	// 第一个 接收值的变量地址(指针)
	// 第二个 参数key -name -sex -hobby...
	// 第三个 参数默认值 即对应key的value默认值
	// 第四个 对参数的说明
	flag.StringVar(&name,"name","","用户的名称")   //接收name参数并分配给name
	flag.IntVar(&age,"age",0,"用户的年龄")         //接收age参数并分配给age
	flag.StringVar(&sex,"sex","","用户的性别")     //接收sex参数并分配给sex
	flag.StringVar(&hobby,"hobby","","用户的爱好") //接收hobby参数并分配给hobby

	//执行转换
	flag.Parse()

	//打印变量,查看各变量接收到的对应参数
	fmt.Printf("name=%v age=%v sex=%v hobby=%v\n",
		name, age, sex, hobby)
}

        执行结果如下:

        根据执行结果可以知道:

        1.启动命令中的参数顺序与业务代码中的分配变量的顺序可以不用一致,只要key与value 与业务代码变量名对应即可

        2.命令行参数名与值之间可以用 = 号  也可以用空格隔开 两种形式都可以

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

golang 自定义命令行flag包简单使用 的相关文章

  • 取消用户特定的 goroutine [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个应用程序 网络应用程序 允许用户使用 twitter oauth 登录并提供自动推文删除功能 用户登录到 Web 应用程序后
  • 投射回更专业的界面

    我正在用 Go 编写一个游戏 在 C 中 我将所有实体类存储在 BaseEntity 类的数组中 如果一个实体需要在世界中移动 那么它将是一个从 BaseEntity 派生的 PhysEntity 但添加了方法 我尝试模仿这是 go pac
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • Golang中如何删除字符串的最后一个字符?

    我想删除字符串的最后一个字符 但在此之前我想检查最后一个字符是否是 如何才能做到这一点 以下是删除尾随加号的几种方法 package main import fmt strings func TrimSuffix s suffix stri
  • 如何从非英语字符串解析go中的月份

    我想将以下字符串解析为 go 中的日期 This item will be released on March 9 2014 我跟着this https stackoverflow com questions 14106541 go par
  • 重新插入通道导致死锁

    我有稳定的入站 作业 流 将其输入到无缓冲通道中 我有一个for range循环来迭代项目并处理它们 如果处理该项目失败 我会将项目重新插入通道中 以便稍后重试 问题是当我将项目重新插入通道时 它陷入僵局 我明白为什么会发生这种情况 处理器
  • Golang中如何获得100%的代码覆盖率? [复制]

    这个问题在这里已经有答案了 我无法获得 100 的代码覆盖率 因为我无法在 Golang 中测试 Fatals 我发现了一些问答 包括this one https stackoverflow com questions 30688554 h
  • 我应该避免在 golang 中使用单例包吗?

    现在我有一个包裹store包含以下内容 package store var db Database func Open url string error open db connection func FindAll model inter
  • 递归追加到切片不起作用

    我正在尝试学习 Go 但我不明白为什么递归调用堆栈末尾的这段代码返回一个空切片 有帮助吗 还tmp甚至似乎没有在调试器中注册 func main input 3 int 4 6 7 expected 6 7 4 6 7 4 6 4 7 fm
  • benchmem 的输出

    使用内存分析器运行基准测试时 我看到以下输出 SomeFunc 100 17768876 ns op 111 B op 0 allocs op 我不明白输出 0 allocs op 但分配了 111 B 知道这意味着什么吗 我的函数是否在堆
  • 是否可以使用 go:generate 重定向 stdin/stdout

    我有一个充当管道的工具 它从标准输入读取数据并将源代码写入标准输出 是否可以设置输入 输出重定向并将此类工具与 go generate 一起使用 就像是 go generate tool lt file txt gt file go 我想出
  • 使用 StructScan 将 postgresql 数组获取到结构中

    测试数据 CREATE TABLE test id int data text INSERT INTO test id data VALUES 1 a b c 去代码吧 第一个 一个运行良好的 func main db sqlx Open
  • Golang 有 libfaketime 替代品吗?

    我想自动化一些测试 我必须操纵系统时间来检查用 golang 编写的程序的身份验证行为 根据这个帖子 https stackoverflow com questions 36024872 libfaketime doesnt work wi
  • 如何捕获或抑制 Go(lang) 测试的 stdout?

    如何捕获或抑制标准输出以进行 Go 测试 我正在尝试自学 go lang 测试 在下面的代码中 myshow LoadPath 将大量信息打印到 stdout 这是正常的副作用 然而 当我运行 go test 时 它确实会产生非常嘈杂的输出
  • 运行时错误:分配给 nil 映射中的条目

    我正在尝试生成一个地图 然后将其转换为 yaml 文件 如下所示 uid kasi cn Chaithra street fkmp nandan cn Chaithra street fkmp remya cn Chaithra stree
  • 非本地包中的本地导入

    我知道应该避免本地进口 但在这种情况下有特殊情况需要 这是一个私人仓库 heroku buildpack 在go get 由于服务器上缺少私钥 与绝对 URL 一起使用时会出现此阶段 现在我得到这个错误local import in non
  • 如何最大限度地减少 Go 中的垃圾收集?

    有时您可能想避免 最小化垃圾收集器 所以我想确定如何做到这一点 我认为下一个是正确的 在函数的开头声明变量 使用数组代替切片 还有吗 为了最大限度地减少 Go 中的垃圾收集 您必须最大限度地减少堆分配 为了最大限度地减少堆分配 您必须了解分
  • 将参数传递给 http.HandlerFunc

    我正在使用 Go 的内置 http 服务器pat http github com bmizerany pat响应某些 URL mux Get products http HandlerFunc index func index w http
  • 如何在Go包之间共享测试接口?

    Go 不会在不同包的测试文件之间共享代码 因此测试接口的定义不会自动重用 在实践中我们如何解决这个问题 使用示例testing quick foo foo go package foo type Thing int const X Thin

随机推荐

  • IDEA调试时的步入(step into)进不去源码怎么办

    文件 gt 设置 gt 构建 执行 部署 gt 调试器 gt 步进 gt 把java 和javax 取消勾选即可
  • 第十节 挂载NFS 网络文件系统

    本章节将介绍如何挂载NFS 网络文件系统 为后面的主机编译生成的ARM Linux 应用传输到开发板做准备 网络文件系统简介 网络文件系统 常被称为NFS Network File System 它是一种非常便捷的在服务器与客户端通过网络共
  • 使用android studio环境新建一个工程——helloworld

    几个月没有学习Android了 今天想研究研究Android与硬件通信 结果都快忘记如何新建一个新的工程了 因此 给自己写一个博客 算作我的备忘录吧 其实很简单 步骤如下 1 需要之前把android studio先部署正确了 能保证正常运
  • Java从入门到实战总结-1.1、Java基础之环境搭建和eclipse安装

    Java从入门到实战总结 1 1 Java基础之环境搭建和eclipse安装 文章目录 Java从入门到实战总结 1 1 Java基础之环境搭建和eclipse安装 1 Hello Java 1 1 Java起源 1 2 Java演变 2
  • MTK9612方案电视STR开机后屏黑有声的问题分析

    问题描述 客户反馈问题 机顶盒连接tv tv str 关机 机顶盒一直开着 过了几个小时 一次 或者第二天过来 一次 str开机 出现tv 黑屏 抓取分析log 考虑到开了ac logleve 7后比较难复制问题 麻烦这样操作 开机停到mb
  • 如何设置网页标签的LOGO

    问题描述 我们打开很多页面都会发现浏览器标签上有LOGO 那么我们该怎么样给自己的网站也设置一个酷炫的LOGO呢 解决办法 1 首先取一张图片 打开 http www bitbug net 或者百度 搜索ico图标制作 制作成16 16px
  • 求二叉树第K层节点的个数

    题目 求二叉树第k层节点的个数 思路 1 递归 求根为root的二叉树第k层节点的个数 就是要求 root left第k 1层节点的个数 root right第k 1层节点的个数 public static int getNumberOfK
  • Idea中使用Tomcat部署并启动Web项目

    首先在Idea中选择编辑运行配置 如下图 左上角的 号 选择Tomcat服务 如下图 自定义服务名称和项目在浏览器的访问路径 配置Tomcat服务器路径 如下图 然后在服务器中部署项目 下面的警告提示 Warning No artifact
  • 深度学习(五)caffe环境搭建

    ubuntu 系统下的Caffe环境搭建 原文地址 http blog csdn net hjimce article details 48781693 作者 hjimce 对于caffe的系统一般使用linux系统 当然也有windows
  • 运算放大器基本参数-增益带宽积(直观解释)

    运算放大器在理想情况下增益为无限大 但是在显示生活中其增益是有限的 增益带宽积指的就是运放的增益和其带宽的乘积 对于一个运放来说这个参数为一个常数 也就意味着增益和带宽成反比 下图通过直观的实验来验证 上图为输入1kHz时输入与输出的波形
  • Proxyee Down简介

    以前写过一篇用Proxyee下载百度网盘大文件的文章 后来一直没在用过 现在发现Proxyee出了新版 功能也增加了 所以重新来介绍一下 现在它的Github地址也变了 现在的地址是 https github com proxyee dow
  • myeclipse中No entries available错误解决方法

    在hibernate中 每个数据表对应的其实是一个实体类 每个实体类有一个对应的hbm xml配置文件和你匹配 myeclipse中有个MyEclipse Database Explorer视图 它提供了myeclipse与数据库直接连接的
  • C++多态理解与认识

    1 什么是多态 多态是指函数调用的多种形态 使我们调用函数更加灵活 多态分为静态多态与动态多态 1 静态多态 静态多态指的是编译时的多态 通过函数重载实现 根据函数命名规则找到函数地址 从而实现调用不同的方法 2 动态多态 运行时 父类指针
  • DVWA-XSS 级别通关详解(图文详细)

    目录 DVWA XSS 级别通关详解 low级别 1 反射性xss 2 存储型xss 3 DOM型xss Medium级别 1 反射型xss 2 存储型xss 3 DOM型xss hight级别 1 反射型xss 2 存储型xss 3 DO
  • 一文搞懂基于用户的协同过滤推荐算法

    本文针对无上下文信息的隐性反馈数据集 每一条行为记录仅仅包含用户ID和物品ID 介绍基于用户的协同过滤算法原理 基于用户的协同过滤推荐算法本质 找到和待推荐用户相似的用户群 推进该用户群感兴趣且待推荐用户没购买过的物品 例如下图中 用户a购
  • java基础

    一 java环境的搭建 搭建Java环境的步骤如下 1 下载Java Development Kit JDK 可以从Oracle官方网站或者其他可靠的网站下载适用于您的操作系统的JDK版本 OpenJDK JDK Updates Proje
  • Linux运维相关命令(不定时更新)

    日志 查找 查看最近n行 gt gt gt tail n 100 filename 查找包含字符 a 的行 gt gt gt grep a filename 修改 删除包含字符 a 的行 gt gt gt sed i e a d filen
  • 求职经历,三轮技术面 +HR 面,面试也不过如此

    众所周知 阿里主要以 Java 为主 因此我投递的职位是 Java 高级 资深开发 我当时是在 Boss 直聘 App 上看到的职位 下图是当时的职位招聘信息 面试过程中注意策略 我求职的阿里的 Java 技术岗位一共有三轮技术面试和一轮
  • Python time和datetime时间戳和时间字符串相互转换

    Python time和datetime时间戳和时间字符串相互转换 时间戳是指格林威治时间1970年01月01日00时00分00秒开始计算所经过的秒数 是一个浮点数 time和datetime都是Python中的内置模块 不需要安装 直接可
  • golang 自定义命令行flag包简单使用

    一 为什么需要使用golang自定义命令行 不恰当的比喻 当我们写了一个服务代码后 按照简单的思维 我们会在业务代码中将要连接的数据库 用户名 主机名 端口号 密码写死 那么也就意味着我们启动该服务后都只能固定连接某一个数据库 而如果我们将