// getCommands
func getCommands() []cli.Command {
command := cli.Command{
Name: "web",
Usage: "run web server",
Action: runWeb,
Flags: []cli.Flag{
cli.StringFlag{
Name: "host",
Value: "0.0.0.0",
Usage: "bind host",
},
cli.IntFlag{
Name: "port,p",
Value: DefaultPort,
Usage: "bind port",
},
cli.StringFlag{
Name: "env,e",
Value: "prod",
Usage: "runtime environment, dev|test|prod",
},
},
} return []cli.Command{command}
}

上面那些代码非常不容易理解,我们需要把它拆分来看
当我们直接实例化一个类的时候,如果大括号竖着排,那么里面的成员赋值后要加个逗号

    b := Taoshihan{
Name: "taoshihan",
}
fmt.Println(b.Name)

定义一个接口,接口里面有一个成员方法

type Flag interface {
GetName() string
}

定义另一个类型,这个类型刚好就有这个方法,那么就可以认为这个类型实现了接口

type StringFlag struct {
}
func (t StringFlag) GetName() string {
return "taoshihan"
}

这个时候如果定义Flag类型的变量,那么StringFlag也能被赋值过去

var a Flag
a = StringFlag{}
a.GetName()

再回到原代码中的逻辑,如果使用下面这种方式就非常容易理解了

var myflag []Flag
myflag = append(myflag, StringFlag{}, StringFlag{}) command := Command{
Flags: myflag,
}

完整源码:

package main

import "fmt"

type Flag interface {
GetName() string
} type Command struct {
Flags []Flag
}
type StringFlag struct {
} func (t StringFlag) GetName() string {
return "taoshihan"
} type Taoshihan struct {
Name string
} func main() {
// var a Flag
// a = StringFlag{}
// a.GetName()
// b := Taoshihan{
// Name: "taoshihan",
// }
// fmt.Println(b.Name) var myflag []Flag
myflag = append(myflag, StringFlag{}, StringFlag{}) command := Command{
Flags: myflag,
}
for _, p := range command.Flags {
fmt.Println(p.GetName())
}
}

最新文章

  1. java的各种类型转换汇总
  2. hdu 1698:Just a Hook(线段树,区间更新)
  3. node设置cookie
  4. 在Spring中使用脚本
  5. iOS - UIGestureRecognizer
  6. IOS基础——IOS学习路线图(一)
  7. iOS 蒙板,图片叠加显示漏空部分
  8. Winform基础 -- 菜单
  9. crackme_zapline分析
  10. awesome-java
  11. 如何设置lmt的空间警告阀值
  12. wso2ESB - 在eclipse中启用调试模式
  13. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)
  14. 强化学习--DeepQnetwork 的一些改进
  15. [转]MyBatis中resultType与resultMap区别
  16. Working with the Dynamic Type in C#
  17. 为什么说Java语言是平台无关的?
  18. Flutter - Error: 'xxx' is imported from both package...
  19. Keil C51与Keil ARM共存
  20. laravel运行慢是怎么回事?

热门文章

  1. iOS常用算法之单链表查找倒数第n个节点(图解)
  2. ABP入门教程6 - 领域层创建实体
  3. Data Management Technology(2) -- Data Model
  4. Linux-3.14.12内存管理笔记【伙伴管理算法(1)】
  5. Fiddler 过滤图片
  6. java8接口
  7. FormData的介绍(一)
  8. 201871010116-祁英红《面向对象程序设计(java)》第七周学习总结
  9. 201871010106-丁宣元 《面向对象程序设计(java)》第十二周学习总结
  10. idea tomcat debug不能启动的问题