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
/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
相关文章推荐
- PHP命令行脚本接收传入参数的三种方式
- 命令行运行Python脚本时传入参数的三种方式
- PHP命令行脚本接收传入参数的三种方式
- 使用ShellExecuteEx调用控制台程序或命令行,传入多个参数,并等待返回结果
- mian方法中的String[] args,命令行运行参数的传入
- spring boot 打成jar包后 通过命令行传入的参数 3中实现方式
- php 命令行方式运行时 几种传入参数的方式
- PHP命令行脚本接收传入参数的三种方式
- 命令行运行Python脚本时传入参数的三种方式
- 设置与读取C#控制台应用程序Main函数中的参数args
- 设置与读取C#控制台应用程序Main函数中的参数args
- PHP命令行脚本接收传入参数的三种方式
- 问题:C#控制台程序参数;结果:设置与读取C#控制台应用程序Main函数中的参数args
- PHP命令行脚本接收传入参数的三种方式
- 读取SQLServer数据库存储过程列表及参数信息
- Java 工具(jmap,jstack)在linux上的源码分析(六) -F 参数 如何读取线程列表
- C# MVC - 直接读取传入的参数。
- java 多种方式文件读取
- java 读取页面源码 的多种方式
- 删除 Mac OS X 中“打开方式”里重复或无用的程序列表