公众号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) }
- 通过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的源文件先编译生成可执行文件
- 运行可执行文件的时候带上命令行参数
- 文件操作
- 文件操作的步骤:
- 根据文件路径获取一个文件句柄(这个句柄可以分为读、写、读写等不同的模式,不同的模式代表可以对文件执行的不同的操作)
- 用这个文件句柄可以获取一个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) } }