命令行编译运行Go语言时参数代入的问题
2015-03-02 10:15
274 查看
转载:http://c2pblog.sinaapp.com/archives/349
Golang 主要用于服务器端,于是shell 命令下面的编译运行就显得非常重要。在linux下面搭建好Golang 环境以后,我们就需要用shell来控制go语言了。熟悉shell的人应该都知道在运行shell脚本的时候经常会有代入参数的情况,一般格式是 sh test.sh [param...] 就是说在后面加上参数就好。那么不出意外Go也是可以这样使用的。当然是可以的。并且本文谈论的重点就是Golang带参数的编译运行。
实现这种效果的是os 包。os.Args [ ]是一个 数组,长度不固定,默认长度是1 ,保存着 go run test.go 这样的字符串,于是如果我们期待在后面加上参数并且调用,那么就是在os.Args 后面进行追加和读取。先看一段代码:
func
main(){
param1:=os.Args[1]
param2:=os.Args[2]
fmt.Println(param1,param2)
}
上面的文件保存为test.go,在命令行运行 go
run test.go 1 2 输出 1 2
这样就可以解析参数了。看起来很简单吧,可是这边存在很严重的问题:如果没有输入参数怎么办?如果输入参数少于要求参数数目怎么办?如果输入参数多余要求参数数目怎么办?上面的前两个问题都会出现同样的错误:index out of range ,第三个问题则会直接丢弃第三个参数。这些都是我们不希望看到的,所以必须做好验证。有人说过 “永远不要相信用户的输入!”意在提醒我们在处理任何和用户交互的地方都要做好验证,以备出现无法挽回的失误。那么我们要怎么做?我找到的方法就是去依据len(os.Args)去做判断。在获取参数之前先去判断究竟有没有参数,如果有参数才能进行相关的操作,没有参数则做出相应的提示。
func
main(){
if len(os.Args)>1{
param1:=os.Args[1]
if len(os.Args)==3{
param1:=os.Args[1]
param2:=os.Args[2]
}
fmt.Println(param1,param2)
}
else {
fmt.Println(” 需要参数”)
}
}
这样就能保证不会出现数组越界的情况
Golang 主要用于服务器端,于是shell 命令下面的编译运行就显得非常重要。在linux下面搭建好Golang 环境以后,我们就需要用shell来控制go语言了。熟悉shell的人应该都知道在运行shell脚本的时候经常会有代入参数的情况,一般格式是 sh test.sh [param...] 就是说在后面加上参数就好。那么不出意外Go也是可以这样使用的。当然是可以的。并且本文谈论的重点就是Golang带参数的编译运行。
实现这种效果的是os 包。os.Args [ ]是一个 数组,长度不固定,默认长度是1 ,保存着 go run test.go 这样的字符串,于是如果我们期待在后面加上参数并且调用,那么就是在os.Args 后面进行追加和读取。先看一段代码:
package main import( "fmt" "os")
func
main(){
param1:=os.Args[1]
param2:=os.Args[2]
fmt.Println(param1,param2)
}
上面的文件保存为test.go,在命令行运行 go
run test.go 1 2 输出 1 2
这样就可以解析参数了。看起来很简单吧,可是这边存在很严重的问题:如果没有输入参数怎么办?如果输入参数少于要求参数数目怎么办?如果输入参数多余要求参数数目怎么办?上面的前两个问题都会出现同样的错误:index out of range ,第三个问题则会直接丢弃第三个参数。这些都是我们不希望看到的,所以必须做好验证。有人说过 “永远不要相信用户的输入!”意在提醒我们在处理任何和用户交互的地方都要做好验证,以备出现无法挽回的失误。那么我们要怎么做?我找到的方法就是去依据len(os.Args)去做判断。在获取参数之前先去判断究竟有没有参数,如果有参数才能进行相关的操作,没有参数则做出相应的提示。
package main import( "fmt" "os")
func
main(){
if len(os.Args)>1{
param1:=os.Args[1]
if len(os.Args)==3{
param1:=os.Args[1]
param2:=os.Args[2]
}
fmt.Println(param1,param2)
}
else {
fmt.Println(” 需要参数”)
}
}
这样就能保证不会出现数组越界的情况
相关文章推荐
- 关于命令行中javac 编译成功,用 java 运行 class 文件出现 “ 找不到或无法加载主类 ” 的问题
- (转)JAVA路径问题及命令行编译运行基础(linux下)
- 命令行使用javac及java编译、运行java程序出现的问题(Windows XP)
- 内核子系统或设备驱动可以直接编译到内核,也可以编译成模块,如果编译到内核,可以使用前一节介绍的方法通过内核启动参数来向它们传递参数,如果编译成模块,则可以通过命令行在插入模块时传递参数,或者在运行时,
- JAVA路径问题及命令行编译运行基础(linux下)
- windows 环境下 cpp 文件命令行编译的配置 & 带参数的main函数的编译和运行
- 用命令行编译运行java文件的乱码问题
- 在Linux下JAVA路径问题及命令行编译运行基础
- JAVA路径问题及命令行编译运行基础(linux下)
- JAVA路径问题及命令行编译运行基础(linux下)
- Java编译和运行过程中的编码问题
- Eclipse 运行命令行参数大全
- [转]Eclipse 运行命令行参数大全
- OpenC的问题,对安装,编译,动态库,链接顺序,运行环境,有界面程序的影响
- 用内嵌汇编来解决运行时参数不确定的函数的调用问题
- csc.exe编译参数的问题
- VC命令行编译(参数介绍)
- Eclipse 运行命令行参数大全
- 用内嵌汇编来解决运行时参数不确定的函数的调用问题
- 关于VS2005编译的程序运行时提示“由于应用程序配置不正确,应用程序未能启动”的问题