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

简介: 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)
   }
}
相关文章
|
7月前
|
Unix Go
Golang 语言的标准库 os 包怎么操作目录和文件?
Golang 语言的标准库 os 包怎么操作目录和文件?
28 0
|
12天前
|
Go API 开发者
Golang深入浅出之-文件与目录操作:os与path/filepath包
【4月更文挑战第26天】Go语言标准库`os`和`path/filepath`提供文件读写、目录操作等功能。本文涵盖`os.Open`, `os.Create`, `os.Mkdir`, `filepath.Join`等API的使用,强调了文件关闭、路径处理、并发写入和权限问题的处理,并给出实战代码示例,帮助开发者高效、安全地操作文件与目录。注意使用`defer`关闭文件,`filepath`处理路径分隔符,以及通过同步机制解决并发写入冲突。
26 2
|
10月前
|
Linux Go Windows
Golang-编译和Go语言文件基本机构
Go语言编译和Go语言文件基本机构
73 0
|
10月前
|
Go
Golang-CSV文件处理
Go语言CSV文件处理
166 0
|
12月前
|
存储 缓存 Go
Golang中文件目录操作的实现
Golang中文件目录操作的实现
77 0
Golang:Excelize读写excel文件的Go语言库
Golang:Excelize读写excel文件的Go语言库
314 0
Golang:Excelize读写excel文件的Go语言库
|
测试技术 Go
Golang:os/io标准库读取文件
Golang:os/io标准库读取文件
89 0
|
Java Linux Go
知识分享之Golang——基于Golang的文件夹是否存在、文件是否存在函数
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
108 0
知识分享之Golang——基于Golang的文件夹是否存在、文件是否存在函数
|
存储 Go API
使用Golang操作文件的那些事儿
使用Golang操作文件的那些事儿
269 0
使用Golang操作文件的那些事儿
|
Shell Go Python
golang调用shell命令(实时输出, 终止, 乱码等)
golang调用shell命令(实时输出, 终止, 乱码等)
1714 0
golang调用shell命令(实时输出, 终止, 乱码等)