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

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 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)
   }
}
相关文章
|
3月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
68 4
Golang语言文件操作快速入门篇
|
3月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
121 4
Golang语言之管道channel快速入门篇
|
3月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
106 3
Golang语言之gRPC程序设计示例
|
3月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
89 4
|
3月前
|
Go
Golang语言错误处理机制
这篇文章是关于Golang语言错误处理机制的教程,介绍了使用defer结合recover捕获错误、基于errors.New自定义错误以及使用panic抛出自定义错误的方法。
51 3
|
3月前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
55 4
Golang语言goroutine协程篇
|
3月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
61 3
Golang语言之Prometheus的日志模块使用案例
|
3月前
|
Go
Golang语言之函数(func)进阶篇
这篇文章是关于Golang语言中函数高级用法的教程,涵盖了初始化函数、匿名函数、闭包函数、高阶函数、defer关键字以及系统函数的使用和案例。
66 3
Golang语言之函数(func)进阶篇
|
3月前
|
Go
Golang语言之函数(func)基础篇
这篇文章深入讲解了Golang语言中函数的定义和使用,包括函数的引入原因、使用细节、定义语法,并通过多个案例展示了如何定义不返回任何参数、返回一个或多个参数、返回值命名、可变参数的函数,同时探讨了函数默认值传递、指针传递、函数作为变量和参数、自定义数据类型以及返回值为切片类型的函数。
66 2
Golang语言之函数(func)基础篇
|
2月前
|
前端开发 中间件 Go
实践Golang语言N层应用架构
【10月更文挑战第2天】本文介绍了如何在Go语言中使用Gin框架实现N层体系结构,借鉴了J2EE平台的多层分布式应用程序模型。文章首先概述了N层体系结构的基本概念,接着详细列出了Go语言中对应的构件名称,包括前端框架(如Vue.js、React)、Gin的处理函数和中间件、依赖注入和配置管理、会话管理和ORM库(如gorm或ent)。最后,提供了具体的代码示例,展示了如何实现HTTP请求处理、会话管理和数据库操作。
33 0