• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    go语言基础 seek光标位置os包的使用

    语法:

    os.Open()-->*File,err *****

    File.Seek(offset, whence),设置光标的未知

    offset,偏移量

    whence,从哪开始:0从头,1当前,2末尾

    package main
    import (
       "os"
       "fmt"
    )
    func main()  {
       /*
       seek(offset int, whence int),表示设置光标的位置
          offset int,设置多少个字节
       whence int,从哪开始
          0,距离文件开头
          1,当前的位置
          2,距离文件末尾
        */
        //file,_:= os.Open("C:\\liu\\pro\\aa.txt") //RDONLY
        file,_:=os.OpenFile("C:\\liu\\pro\\aa.txt",os.O_RDWR,0)
        //1.打开文件后,光标默认在文件开头。
        bs := make([] byte, 1)
        defer file.Close()
        //2.seek()
        //设置光标的位置在:距离文件开头,4个字节处。
        //file.Seek(8,0)
        count, _:= file.Read(bs)
       fmt.Println(string(bs[:count])) //a
        file.Seek(4,2)
       //count, _= file.Read(bs)
       //fmt.Println(string(bs[:count])) //
       file.Write([]byte{65,66,67})
       fmt.Println("写完了。。")
    }
    

    补充:Go语言-命令行参数(os.Args, flag包)

    大部分Go程序都是没有UI的,运行在纯命令行的模式下,该干什么全靠运行参数。

    这里介绍下Go语言命令行程序和他们的参数。

    1. os.Args

    程序获取运行他时给出的参数,可以通过os包来实现。先看代码:

    package main
    import (
     "fmt"
     "os"
     "strconv"
    )
    func main () {
     for idx, args := range os.Args {
      fmt.Println("参数" + strconv.Itoa(idx) + ":", args)
     }
    }
    

    运行起来得到的如下:

    $go run main.go 1 3 -X ?

    参数0: /tmp/go-build116558042/command-line-arguments/_obj/exe/main

    参数1: 1

    参数2: 3

    参数3: -X

    参数4: ?

    可以看到,命令行参数包括了程序路径本身,以及通常意义上的参数。

    程序中os.Args的类型是 []string ,也就是字符串切片。所以可以在for循环的range中遍历,还可以用 len(os.Args) 来获取其数量。

    如果不想要输出os.Args的第一个值,也就是可执行文件本身的信息,可以修改上述程序:

    for idx, args := range os.Args[1:] {

    将range后面的切片,去掉第一个元素。

    输出切片的所有元素,还有更简洁的方式:

    fmt.Println(strings.Join(os.Args[1:], "\n"))
    fmt.Println(os.Args[1:])
    /*
    后一种方式的结果是[1 3 -X ?],这是fmt.Println输出切片的格式
    */

    2. flag包

    flag包相比单纯的通过os.Args切片分析命令行参数,提供了更强的能力。

    来看个例子:

    package main
    import (
    	"fmt"
    	"flag"
    )
    var b = flag.Bool("b", false, "bool类型参数")
    var s = flag.String("s", "", "string类型参数")
    func main() {
    	flag.Parse()
    	fmt.Println("-b:", *b)
    	fmt.Println("-s:", *s)
    	fmt.Println("其他参数:", flag.Args())
    }
    ------------------------------------
    $ go run main.go
    -b: false
    -s: 
    其他参数: []
    ------------------------------------
    $ go run main.go -b
    -b: true
    -s: 
    其他参数: []
    ------------------------------------
    $ go run main.go -b -s test others
    -b: true
    -s: test
    其他参数: [others]
    ------------------------------------
    $ go run main.go  -help
    Usage of /tmp/go-build080353851/command-line-arguments/_obj/exe/main:
      -b	bool类型参数
      -s string
        	string类型参数
    exit status 2
    

    2.1 定义参数

    使用flag包,首先定义待解析命令行参数,也就是以"-"开头的参数,比如这里的 -b -s -help等。-help不需要特别指定,可以自动处理。

    这里指定了两个参数,-b和-s:

    var b = flag.Bool("b", false, "bool类型参数")
    var s = flag.String("s", "", "string类型参数")
    -----------------
    原型:
    func Bool(name string, value bool, usage string) *bool
    func String(name string, value string, usage string) *string
    

    通过flag.Bool和flag.String,建立了2个指针b和s,分别指向bool类型和string类型的变量。所以后续要通过 *b 和 *s 使用变量值。

    flag.Bool和flag.String的参数有3个,分别是命令行参数名称,默认值,提示字符串。

    参数 功能
    name 命令行参数名称,比如 -b, -help
    value 默认值,未显式指定的参数,给出隐式的默认值,比如本例中-b未给出的话,*b=false
    usage 提示信息,如果给出的参数不正确或者需要查看帮助 -help,那么会给出这里指定的字符串

    2.2 解析参数

    flag使用前,必须首先解析:

    flag.Parse()

    2.3 使用参数

    上文已经说明,通过flag方法定义好的参数变量指针,通过间接引用操作即可使用其内容:

    fmt.Println("-b:", *b)
    fmt.Println("-s:", *s)

    2.4 未解析参数

    参数中没有能够按照预定义的参数解析的部分,通过flag.Args()即可获取,是一个字符串切片。

    fmt.Println("其他参数:", flag.Args())

    需要注意的是,从第一个不能解析的参数开始,后面的所有参数都是无法解析的。即使后面的参数中含有预定义的参数:

    $ go run main.go -b stop -s test others
    -b: true
    -s: 
    其他参数: [stop -s test others]

    上面例子中,解析到stop,就已经无法继续解析了,即使后面给出了预定义好的-s,也是不能获取出来的。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • go 实现简易端口扫描的示例
    • go xorm框架的使用
    • 解析Go的Waitgroup和锁的问题
    • Go语言快速入门图文教程
    • Go语言获取文件的名称、前缀、后缀
    • Go语言 如何实现RSA加密解密
    • Go 自定义package包设置与导入操作
    • 详解Gotorch多机定时任务管理系统
    上一篇:Golang 实现获取当前函数名称和文件行号等操作
    下一篇:Go实现各类限流的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    go语言基础 seek光标位置os包的使用 语言基础,seek,光标,位置,