zac*_*yer 4 go command-line-arguments
我正在写一个go程序,我需要使用命令参数.但是,如果我在运行可执行文件或go run gosite.go
代码时不传递参数,则会执行以下运行时错误.
panic: runtime error: index out of range
goroutine 1 [running]:
runtime.panic(0x80c8540, 0x816d4b7)
/usr/lib/go/src/pkg/runtime/panic.c:266 +0xac
main.main()
/home/jacob/github/gosite/src/github.com/zachdyer/gosite/gosite.go:11 +0x168
Run Code Online (Sandbox Code Playgroud)
错误发生在第11行.所以我的问题是我os.Args
是以错误的方式使用?这需要以不同的方式初始化吗?为什么它似乎在那里无限循环?如果我传入一个参数,程序运行时没有任何错误并打印参数.
import (
"fmt"
"os"
)
var root string
func main() {
command := os.Args[1]
if command != "" {
fmt.Println(command)
} else {
command = ""
fmt.Println("No command given")
}
createDir("public")
createDir("themes")
}
func createDir(dir string) {
root = "../../../../"
err := os.Mkdir(root + dir, 0777)
if err != nil {
fmt.Println(err)
}
}
Run Code Online (Sandbox Code Playgroud)
icz*_*cza 17
首先检查os.Args
切片的长度,并仅索引其长度 - 1:
if len(os.Args) > 1 {
command := os.Args[1]
// do something with command
} else {
// No arguments were specified!
}
Run Code Online (Sandbox Code Playgroud)
os.Args
保存命令行参数,从程序名称开始.
os.Args[0]
是程序名称.如果有争论,他们会去Args[1]
,Args[2]
......
如果未指定参数,则长度os.Args
将为1,并且仅保存程序名称.
此外,为了更容易和更复杂的参数处理检查flag
包.
归档时间: |
|
查看次数: |
6929 次 |
最近记录: |