您的位置:首页 > 编程语言 > Go语言

Golang 读取操作系统命令行控制台传入的参数列表os.Args的多种方式

2017-07-02 11:03 316 查看
方法一


/root/code/go/src/contoso.org/book/main.go

package main

import (

    "fmt"

    "os"

    "reflect"

    "strings"

)

func main() {

    PrintArgs1(os.Args)

}

//变参函数的定义方式

func PrintArgs1(args ...interface{}) {

    fmt.Println(args[0].([]string))

    fmt.Println(reflect.TypeOf(args[0]))

    for k, v := range args[0].([]string) {

        fmt.Println(k, " =", v, reflect.TypeOf(v))

    }

    fmt.Println("========================================")

    var myStr = (args[0].([]string))[1]    //直接点击调试运行,此行代码数组就越界了

    fmt.Println("myStr =", myStr, "myStr Type =", reflect.TypeOf(myStr))

    ss := strings.Split(myStr, ",")

    for k, v := range ss {

        fmt.Println(k, " =", v, reflect.TypeOf(v))

    }

}



提示,上面的代码写法没有任何错误,但不能直接点击调试运行,因为程序运行时必须传入参数值

[root@contoso ~]# tree $GOPATH/src/contoso.org -L 3  ##查看项目目录结构

/root/code/go/src/contoso.org

├── book

   ├── debug

   └── main.go


[root@contoso ~]# cd $GOPATH && go install contoso.org/book && cd ~
[root@contoso ~]# book 141,13,105,17,208
[book 141,13,105,17,208]

[]string

0  = book string

1  = 141,13,105,17,208 string

========================================

myStr = 141,13,105,17,208 myStr Type = string

0  = 141 string

1  = 13 string

2  = 105 string

3  = 17 string

4  = 208 string
[root@contoso ~]#



方法二

单步调试之前,设置好Args的初始化值列表,同样适合上面的范例,直接这样[root@contoso ~]#[b] book 即可运行book
[/b]






launch.json:


{

    "version": "0.2.0",

    "configurations": [

        {

            "name": "Launch",

            "type": "go",

            "request": "launch",

            "mode": "debug",

            "remotePath": "",

            "port": 2345,

            "host": "127.0.0.1",

            "program": "${fileDirname}",

            "env": {},

            "args": ["141","13","105","17","208"],

            "showLog": true

        }

    ]

}











方法二的简写格式

package main

import (

    "fmt"

    "os"

    "reflect"

)

func main() {
    for _, arg := range os.Args[1:] {

        fmt.Println("arg =", arg, " arg Type =", reflect.TypeOf(arg))    // 可以把每个字符串参数转换成我们需要的类型

    }

}

调试控制台会输出以下信息:

2017/07/02 14:52:02 server.go:73: Using API v1

2017/07/02 14:52:02 debugger.go:97: launching process with args: [/root/code/go/src/contoso.org/book/debug 141 13 105 17 208]

API server listening at: 127.0.0.1:2345

2017/07/02 14:52:03 debugger.go:505: continuing

arg = 141  arg Type = string

arg = 13  arg Type = string

arg = 105  arg Type = string

arg = 17  arg Type = string

arg = 208  arg Type = string

[b]方法三[/b]

package main

import (

    "fmt"

    "os"

    "reflect"

    "strings"

)

func main() {

    fmt.Println(strings.Join(os.Args[1:], " "))   // 传入的数据量很大,一种简单且高效的解决方案是使用strings包的Join函数

    

    args := strings.Split(strings.Join(os.Args[1:], " "), " ")

    for _, arg := range args {

        fmt.Println("arg =", arg, " arg Type =", reflect.TypeOf(arg))

    }

}

调试控制台打印输出如下信息:

2017/07/02 11:21:11 server.go:73: Using API v1

2017/07/02 11:21:11 debugger.go:97: launching process with args: [/root/code/go/src/contoso.org/book/debug 141 13 105 17 208]

API server listening at: 127.0.0.1:2345

2017/07/02 11:21:12 debugger.go:505: continuing

141 13 105 17 208
arg = 141  arg Type = string

arg = 13  arg Type = string

arg = 105  arg Type = string

arg = 17  arg Type = string

arg = 208  arg Type = string
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: