Go 语言

2025年04月19日更新 4 人订阅
原价: ¥ 2 限时优惠
专栏简介 数据结构 in Golang:Hash Tables(哈希表) 算法 in Golang:Quicksort(快速排序) 算法 in Golang:Recursion(递归) 用Go语言构建分布式系统:服务注册、发现与日志管理实践 算法 in Golang:Selection sort(选择排序) Go语言之基本数据类型 深入探索Go语言:从初识到实践 实战:Go语言项目之使用JWT实现用户认证 算法 in Go:Binary Search(二分查找) 算法 in Golang:Breadth-first search(BFS、广度优先搜索) 算法 in Golang:D & C(分而治之) Go语言(Golang)编写最简单的命令行工具 深入探讨 Go 语言中的自定义 Zap 日志 Go语言详解:实现MySQL数据库的增删改查操作 深入解析Go语言Gin框架:路由注册与中间件源码剖析 Go 语言之在 Gin 框架中使用 Zap 实现高效日志管理 Go 语言中 zap 日志库的高效使用指南 Go 语言日志系统自定义:精细化日志管理与应用示例 Go 语言之搭建通用 Web 项目开发脚手架 Go语言结构体(struct)详解:定义、使用与JSON编码 探索 Go 语言的无类设计:从 Struct 到组合的优雅之道 地鼠工厂的秘密:解锁Go语言中goroutine的并发魔法 Go 并发编程实战:从互斥锁到 Goroutine 的优雅之道 用 Go 语言打造高效 TCP 扫描器:从入门到并发优化 gogen:一键生成 Go 项目,开发者的效率利器 深入剖析 Go 接口底层实现:从 eface 到 iface(基于 Go 1.24 源码) Go并发实战:5协程随机数求和 Go 开发必备:解锁 Viper 配置管理的正确姿势

Go语言(Golang)编写最简单的命令行工具

Go语言(Golang)编写最简单的命令行工具"项目预览>echoabc123--name=nickabc123--name=nick课程概述如何制作命令行应用如何使用os.Args获得命令行参数前提条件懂得Go语言基本语法知识点OS包提供了用于处

Go语言(Golang)编写最简单的命令行工具"

项目预览

>echo abc 123 --name=nick
abc 123 --name=nick

课程概述

  • 如何制作命令行应用
  • 如何使用 os.Args 获得命令行参数

前提条件

  • 懂得 Go 语言基本语法

知识点

  • OS 包提供了用于处理操作系统相关内容的函数/值
    • 独立于平台的方式
  • os.Args 变量
    • 获得命令行的参数
    • 它是 string slice
    • 第一个值是命令本身
  • strings.Join 函数

实践

创建项目目录并在该目录下创建 main.go 文件

~/Code/go via 🐹 v1.20.3 via 🅒 base
➜ mcd echo # mkdir echo cd echo

Code/go/echo via 🐹 v1.20.3 via 🅒 base
➜ c # code . 

Code/go/echo via 🐹 v1.20.3 via 🅒 base took 2.4s
➜

main.go 文件

package main

import (
 "fmt"
 "os"
)

func main() {
 var s, sep string
 // os.Args

 for i := 1; i < len(os.Args); i++ {
  s += sep + os.Args[i]
  sep = " "
 }

 fmt.Println(s)
}

运行

Code/go/echo via 🐹 v1.20.3 via 🅒 base 
➜ go build .         

Code/go/echo via 🐹 v1.20.3 via 🅒 base 
➜ ls
echo    main.go

Code/go/echo via 🐹 v1.20.3 via 🅒 base 
➜ echo                                                                    

Code/go/echo via 🐹 v1.20.3 via 🅒 base 
➜ echo 123                                                                
123

Code/go/echo via 🐹 v1.20.3 via 🅒 base 
➜ echo 123 abc ert
123 abc ert

Code/go/echo via 🐹 v1.20.3 via 🅒 base 
➜ 

优化修改一

package main

import (
 "fmt"
 "os"
)

func main() {
 // var s, sep string
 s, sep := "", ""
 // os.Args

 for _, arg := range os.Args[1:] {
  s += sep + arg
  sep = " "
 }

 // for i := 1; i < len(os.Args); i++ {
 //  s += sep + os.Args[i]
 //  sep = " "
 // }

 fmt.Println(s)
}

运行

Code/go/echo via 🐹 v1.20.3 via 🅒 base 
➜ go build . && echo 123 abc x=123ed
123 abc x=123ed

Code/go/echo via 🐹 v1.20.3 via 🅒 base 
➜ 

优化修改二

package main

import (
 "fmt"
 "os"
 "strings"
)

func main() {
 // var s, sep string
 // s, sep := "", ""
 // os.Args

 // for _, arg := range os.Args[1:] {
 //  s += sep + arg
 //  sep = " "
 // }

 // for i := 1; i < len(os.Args); i++ {
 //  s += sep + os.Args[i]
 //  sep = " "
 // }

 // fmt.Println(s)

 fmt.Println(strings.Join(os.Args[1:], " "))
}

用户输入

  • bufio.NewReader()

实践

~/Code/go via 🐹 v1.20.3 via 🅒 base
➜ mcd cli-demo

Code/go/cli-demo via 🐹 v1.20.3 via 🅒 base
➜ go mod init
go: cannot determine module path for source directory /Users/qiaopengjun/Code/go/cli-demo (outside GOPATH, module path must be specified)

Example usage:
 'go mod init example.com/m' to initialize a v0 or v1 module
 'go mod init example.com/m/v2' to initialize a v2 module

Run 'go help mod init' for more information.

Code/go/cli-demo via 🐹 v1.20.3 via 🅒 base
➜ go mod init cli-demo
go: creating new go.mod: module cli-demo

Code/go/cli-demo via 🐹 v1.20.3 via 🅒 base
➜ c

Code/go/cli-demo via 🐹 v1.20.3 via 🅒 base
➜

main.go 代码

package main

import (
 "bufio"
 "fmt"
 "os"
)

func main() {
 fmt.Println("What's your name?")
 reader := bufio.NewReader(os.Stdin)
 text, _ := reader.ReadString('\n')
 fmt.Printf("Your name is: %s", text)
}

运行

Code/go/cli-demo via 🐹 v1.20.3 via 🅒 base took 5.9s 
➜ go run .      
What's your name?
dave
Your name is: dave

Code/go/cli-demo via 🐹 v1.20.3 via 🅒 base took 3.1s 
➜ go run main.go
What's your name?
xiaoqiao
Your name is: xiaoqiao

Code/go/cli-demo via 🐹 v1.20.3 via 🅒 base took 3.1s 
➜ 
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论