Go语言库系列之flag的具体使用

 更新时间:2020年04月02日 09:37:28   作者:平也  
这篇文章主要介绍了Go语言库系列之flag的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

背景

终端(命令行)操作是程序员的必备技能,但是你知道怎么通过golang制作出如下命令吗?

$ flag girl -h
Usage of girl:
 -height int
  身高 (default 140)

$ flag girl --height 170

恭喜你获得了身高 170 的女朋友

极速上手

整个实现非常简单,只需要5个步骤

第一步,引库

import "flag"

第二步,定义变量

定义该变量的作用是存储命令行参数传来的值

var height int

第三步,配置命令信息

在main函数或init函数中加入

flag.IntVar(&height, "height", 140, "身高")
  • 第一个参数是定义的变量引用
  • 第二个参数:命令的名称
  • 第三个参数:命令参数的默认值
  • 第四个参数:命令的用法提示

第四步,解析参数

在main函数中追加

flag.Parse()

第五步,打印变量

在main函数中追加

fmt.Println("恭喜你获得了身高", height, "的女朋友")

大功告成,感兴趣的同学可以自行测试。

完整代码

package main

import (
 "flag"
 "fmt"
)

var height int

func main() {
 flag.IntVar(&height, "height", 140, "身高")
 flag.Parse()
 fmt.Println("恭喜你获得了身高", height, "的女朋友")
}

高手进阶

支持多种执行方式

在终端执行时,以下几种传参方式都被支持

$ girl -height 170
$ girl --height 170
$ girl --height=170
$ girl -height=170

支持多种参数值类型

目前支持字符串、布尔、整型、浮点、时间等多种类型,完全该所有场景。

布尔类型支持多种写法

虽然布尔只有true或false,但写法却可以各种变种,非常骚气,支持的写法有

1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False

隐式处理接收的参数值

如果我要悄悄地把传入身高减去5厘米怎么办?

第一步,定义一个height类型

type height int

第二步,实现flag.Value接口的两个方法

func (h *height) String() string {
 return fmt.Sprint(*h)
}

func (h *height) Set(value string) error {
 valueInt, _ := strconv.Atoi(value)
 *h = height(valueInt - 5)
 return nil
}

String方法用于格式化值,Set方法用于处理变量设置时候的逻辑。

第三步,定义height类型变量

var heightFlag height

第四步,主函数配置及解析

func main() {
 flag.Var(&heightFlag, "height", "身高")
 flag.Parse()
 fmt.Println(heightFlag)
}

代码与极速上手中的主函数内容大致相同,只是调用了flag.Var方法,该方法不需要传入默认值。

到此这篇关于Go语言库系列之flag的具体使用的文章就介绍到这了,更多相关Go flag内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解golang碎片整理之 fmt.Scan

    详解golang碎片整理之 fmt.Scan

    本文介绍了从golang语言中fmt包从标准输入获取数据的Scan系列函数、从io.Reader中获取数据的Fscan系列函数以及从字符串中获取数据的Sscan系列函数的用法,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • go defer return panic 执行顺序示例详解

    go defer return panic 执行顺序示例详解

    这篇文章主要介绍了go defer return panic 执行顺序,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • 初探GO中unsafe包的使用

    初探GO中unsafe包的使用

    unsafe是Go语言标准库中的一个包,提供了一些不安全的编程操作,本文将深入探讨Go语言中的unsafe包,介绍它的使用方法和注意事项,感兴趣的可以了解下
    2023-08-08
  • Go gin权限验证实现过程详解

    Go gin权限验证实现过程详解

    这篇文章主要为大家介绍了Go gin权限验证实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • golang实现对JavaScript代码混淆

    golang实现对JavaScript代码混淆

    在Go语言中,你可以使用一些工具来混淆JavaScript代码,一个常用的工具是Terser,它可以用于压缩和混淆JavaScript代码,你可以通过Go语言的`os/exec`包来调用Terser工具,本文给通过一个简单的示例给大家介绍一下,感兴趣的朋友可以参考下
    2024-01-01
  • Go项目与Docker结合实现高效部署深入探究

    Go项目与Docker结合实现高效部署深入探究

    在现代软件开发中,使用Docker部署应用程序已经成为一种标准实践,本文将深入探讨如何将Go项目与Docker结合,实现高效、可靠的部署过程,通过详细的步骤和丰富的示例,你将能够迅速掌握这一流程
    2023-12-12
  • 浅析Go中序列化与反序列化的基本使用

    浅析Go中序列化与反序列化的基本使用

    序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程,反向过程称为“反序列化”。本文主要介绍了Go中序列化与反序列化的基本使用,需要的可以参考一下
    2023-04-04
  • Go 语言的 :=的具体使用

    Go 语言的 :=的具体使用

    本文主要介绍了Go 语言的 :=的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 详解Golang中interface接口的原理和使用技巧

    详解Golang中interface接口的原理和使用技巧

    interface 接口在 Go 语言里面的地位非常重要,是一个非常重要的数据结构。本文主要介绍了Golang中interface接口的原理和使用技巧,希望对大家有所帮助
    2022-11-11
  • go语言net包rpc远程调用的使用示例

    go语言net包rpc远程调用的使用示例

    本篇文章主要介绍了go语言net包rpc远程调用的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11

最新评论