golang获取命令行参数和文件操作

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: golang获取命令行参数和文件操作

公众号merlinsea


  • 获取命令行参数
  • 通过flag来解析命令行参数【推荐使用】,在实际开发的项目中,可以通过命令行参数来判断是调用定时任务执行还是调用普通微服务项目。
  • 通过flag.xxxVar将参数解析出来
  • flag.Parse执行解析


package main
import (
   "fmt"
   "flag"
)
func main() {
   //定义几个变量,用于接收命令行的参数值
   var user string
   var pwd string
   var host string
   var port int
   //&user 就是接收用户命令行中输入的 -u 后面的参数值
   //"u" ,就是 -u 指定参数
   //"" , 默认值
   //"用户名,默认为空" 说明
   flag.StringVar(&user, "u", "", "用户名,默认为空")
   flag.StringVar(&pwd, "pwd", "", "密码,默认为空")
   flag.StringVar(&host, "h", "localhost", "主机名,默认为localhost")
   flag.IntVar(&port, "port", 3306, "端口号,默认为3306")
   //这里有一个非常重要的操作,转换, 必须调用该方法
   flag.Parse()
   //输出结果
   fmt.Printf("user=%v pwd=%v host=%v port=%v", 
      user, pwd, host, port)
}

640.jpg


  • 通过os.Args切片来解析命令行参数
  • os.Args是包含了所有的命令行参数,参数顺序不能随意变动


package main
import (
   "fmt"
   "os"
)
func main() {
   fmt.Println("命令行的参数有", len(os.Args))
   //遍历os.Args切片,就可以得到所有的命令行输入参数值
   for i, v := range os.Args {
      fmt.Printf("args[%v]=%v\n", i, v)
   }
}


  • 执行的过程:
  • 首先对于go的源文件先编译生成可执行文件
  • 运行可执行文件的时候带上命令行参数

640.jpg

  • 文件操作
  • 文件操作的步骤:
  • 根据文件路径获取一个文件句柄(这个句柄可以分为读、写、读写等不同的模式,不同的模式代表可以对文件执行的不同的操作)
  • 用这个文件句柄可以获取一个Reader / Writer ,这里的Writer和Reader可以分为带缓存和不带缓存,带缓存的Reader和Writer适合处理大文件的读写操作。
  • 通过Reader / Writer 从文件中读取数据或者写入数据。
import (
   "bufio"
   "fmt"
   "io"
   "os"
)
//自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {
   srcFile, err := os.Open(srcFileName)
   if err != nil {
      fmt.Printf("open file err=%v\n", err)
   }
   defer srcFile.Close()
   //通过srcfile ,获取到 Reader
   reader := bufio.NewReader(srcFile)
   //打开dstFileName
   dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)
   if err != nil {
      fmt.Printf("open file err=%v\n", err)
      return
   }
   //通过dstFile, 获取到 Writer
   writer := bufio.NewWriter(dstFile)
   defer dstFile.Close()
   return io.Copy(writer, reader)
}
func main() {
   //将d:/flower.jpg 文件拷贝到 e:/abc.jpg
   //调用CopyFile 完成文件拷贝
   srcFile := "d:/flower.jpg"
   dstFile := "e:/abc.jpg"
   _, err := CopyFile(dstFile, srcFile)
   if err == nil {
      fmt.Printf("拷贝完成\n")
   } else {
      fmt.Printf("拷贝错误 err=%v\n", err)
   }
}
相关文章
|
9月前
|
Unix Go
Golang 语言的标准库 os 包怎么操作目录和文件?
Golang 语言的标准库 os 包怎么操作目录和文件?
33 0
|
2月前
|
Rust
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
70 0
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
|
3天前
|
网络协议 Go C语言
在golang中调试时的指令和使用技巧
【7月更文挑战第4天】 本文介绍 Go调试工具`dlv`常用命令概览及其使用技巧。
45 2
在golang中调试时的指令和使用技巧
|
2月前
|
Shell Go API
7天玩转 Golang 标准库之 os
7天玩转 Golang 标准库之 os
28 1
|
2月前
|
Go API 开发者
Golang深入浅出之-文件与目录操作:os与path/filepath包
【4月更文挑战第26天】Go语言标准库`os`和`path/filepath`提供文件读写、目录操作等功能。本文涵盖`os.Open`, `os.Create`, `os.Mkdir`, `filepath.Join`等API的使用,强调了文件关闭、路径处理、并发写入和权限问题的处理,并给出实战代码示例,帮助开发者高效、安全地操作文件与目录。注意使用`defer`关闭文件,`filepath`处理路径分隔符,以及通过同步机制解决并发写入冲突。
46 2
|
12月前
|
Linux Go Windows
Golang-编译和Go语言文件基本机构
Go语言编译和Go语言文件基本机构
81 0
|
12月前
|
Go
Golang-CSV文件处理
Go语言CSV文件处理
183 0
|
存储 缓存 Go
Golang中文件目录操作的实现
Golang中文件目录操作的实现
82 0
Golang:Excelize读写excel文件的Go语言库
Golang:Excelize读写excel文件的Go语言库
342 0
Golang:Excelize读写excel文件的Go语言库
|
Linux Go vr&ar
Golang cgo:如何在Go代码中调用C语言代码?
Golang cgo:如何在Go代码中调用C语言代码?
625 0
Golang cgo:如何在Go代码中调用C语言代码?