暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

176
  • 获取命令行参数

    • 通过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)
        }


        }

        文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论