[Go] gocron源码阅读-go语言中的切片接口和类型综合
// 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())
    }
}
[Go] gocron源码阅读-go语言中的切片接口和类型综合的更多相关文章
- [Go] gocron源码阅读-go语言中的切片和类型综合
		
在gocron.go文件的main函数中,有下面这一句,从这句代码中可以学习到切片和类型的综合运用 cliApp.Flags = append(cliApp.Flags, []cli.Flag{}.. ...
 - [Go] gocron源码阅读-go语言中数组和切片的字面值初始化语法
		
源码中有这么一句,这个函数要求返回的是[]cli.Command,cli.Command类型的切片,这个地方直接使用字面值初始化了一个切片返回去了 return []cli.Command{comma ...
 - [Go] gocron源码阅读-go语言web框架Macaron
		
gocron源码中使用的是马卡龙框架,下面这个就是安装这个框架,和一般的MVC框架很像go get gopkg.in/macaron.v1git clone https://github.com/go ...
 - [Go] gocron源码阅读-go语言的结构体
		
结构体类型 type 名字 struct{},下面这段是github.com/urfave/cli包里的代码,声明了一个App的结构体类型 type App struct { // The name ...
 - [日常] gocron源码阅读-go语言的变量
		
变量的声明形式是这样的 var 变量名字 类型 = 表达式var ( AppVersion = "1.5" BuildDate, GitCommit string)类型可以被省略, ...
 - SpringMVC源码阅读:Controller中参数解析
		
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...
 - [Go] gocron源码阅读-通过第三方cli包实现命令行参数获取和管理
		
gocron源码中使用的是下面这个第三方包来实现的,下面就单独的拿出来测试以下效果,和官方flag包差不多 go get github.com/urfave/cli package main impo ...
 - opencv源码阅读之——iOS的两条接口UIImageToMat()和MatToUIImage()
		
本文为作者原创,未经允许不得转载:原文由作者发表在博客园: http://www.cnblogs.com/panxiaochun/p/5387743.html 在ios下开发基于opencv的程序时经 ...
 - [Go] gocron源码阅读-空接口类型interface{}
		
gocron源代码中的Action那个地方,就是个空接口类型Action interface{},可以传递任意类型进去,这里是传了个函数进去 command := cli.Command{ Name: ...
 
随机推荐
- 【bzoj4945】[Noi2017]游戏(搜索+2-sat)
			
bzoj 洛谷 题意: 现在有\(a,b,c\)三种车,每个赛道可能会存在限制:\(a\)表示不能选择\(a\)类型的赛车,\(b,c\)同理:\(x\)表示该赛道不受限制,但\(x\)类型的个数$\ ...
 - Java实战|Tomcat+Servlet+Sql开发简单网站,从配置环境开始
			
课题描述: Java实验五 Servlet (继续使用实验四中创建的students数据库和其中的scores表) 使用Tomcat作为Web服务器和Servlet容器,使用SQL Server/My ...
 - IDEA如何打包可运行jar,外部引用jar包版
			
背景: 有时候,我们会用IDEA来开发一些小工具,需要打成可运行的JAR包:或者某些项目不是WEB应用,纯粹是后台应用,发布时,也需要打成可运行的JAR包.并且,如果依赖第三方jar时,又不希望第三方 ...
 - Leetcode 90. 子集 II
			
地址 https://leetcode-cn.com/problems/subsets-ii/ 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重 ...
 - 2019 SDN上机第5次作业
			
2019 SDN上机第5次作业 1.浏览RYU官网学习RYU控制器的安装和RYU开发入门教程,提交你对于教程代码的理解,包括但不限于: 描述官方教程实现了一个什么样的交换机功能? 答:官方教程实现了一 ...
 - Java并发编程:Java实现多线程的几种方式
			
在Java中,多线程主要的实现方式有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService ...
 - python request获取ip、获取登录设备
			
from flask import request 获取ip request.remote_addr 获取登录设备 request.user_agent.string
 - python同名函数同名参数问题
			
如果python有两个函数的函数名与参数列表都相同那么调用该函数时,哪个函数在后,则哪个被最终调用. 举例如下: def test(): print "before hello" ...
 - Unity AI 感知侦探
			
游戏中AI的感知用的最多的是看到或者听到,也就是: 1.视觉感知 2.听觉感知 视觉感知: 视觉感知一般会有一个视野范围,这个范围与角色的朝向有关,只有在视觉范围内角色才有可能感知得到,这个范围与一个 ...
 - attention 汇总(持续)
			
Seq2seq Attention Normal Attention 1. 在decoder端,encoder state要进行一个线性变换,得到r1,可以用全连接,可以用conv,取决于自己,这里 ...