以下c.Args()>的使用是什么? 0

时间:2015-02-17 10:42:58

标签: go

此代码来自cli Go包:https://github.com/codegangsta/cli

package main

import (
    "github.com/codegangsta/cli"
    "os"
)

func main() {
    app := cli.NewApp()
    app.Name = "greet"
    app.Usage = "fight the loneliness!"
    app.Flags = []cli.Flag{
        cli.StringFlag{
            Name:  "lang, l",
            Value: "english",
            Usage: "language for the greeting",
        },
    }

    app.Action = func(c *cli.Context) {
        name := "someone"
        if len(c.Args()) > 0 {
            name = c.Args()[0]
        }
        if c.String("lang") == "spanish" {
            println("Hola", name)
        } else {
            println("Hello", name)
        }
    }

    app.Run(os.Args)
}

我是一个Go初学者,除了这一部分,我理解一切:

if len(c.Args()) > 0 {
    name = c.Args()[0]
}

那个街区怎么说?为什么有必要?

1 个答案:

答案 0 :(得分:4)

函数Args返回一个对象Args,它是一个字符串片段(参见context.go):

type Args []string

要获取该切片的第一个元素([0]),必须事先检查它是否为空,因此len测试。如果你不这样做并且切片恰好为空,则会出现index out of range运行时错误并且程序会出现恐慌。