在gocron.go文件的main函数中,有下面这一句,从这句代码中可以学习到切片和类型的综合运用 cliApp.Flags = append(cliApp.Flags, []cli.Flag{}...) 首先在go语言中定义一个类型需要使用type 名字 struct{},还可以给这个类型定义成员方法 type Taoshihan struct { } func (t Taoshihan) Say() string { return "my name is taoshihan" }…
// 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 ho…
源码中有这么一句,这个函数要求返回的是[]cli.Command,cli.Command类型的切片,这个地方直接使用字面值初始化了一个切片返回去了 return []cli.Command{command} 数组的字面值初始化,一般是需要指定数组的大小,可以使用...三个点来代替大小,根据后面初始化的个数来计算,下面就是字面值初始化一个数组 arr := [...], , } for i, j := range arr { fmt.Println(i, j) } 切片和数组很类似,并且切片的底层…
gocron源码中使用的是马卡龙框架,下面这个就是安装这个框架,和一般的MVC框架很像go get gopkg.in/macaron.v1git clone https://github.com/golang/crypto.git $GOPATH/src/golang.org/x/crypto 监听80端口,使用模板引擎的简单例子 package main import "gopkg.in/macaron.v1" func main() { m := macaron.Classic()…
结构体类型 type 名字 struct{},下面这段是github.com/urfave/cli包里的代码,声明了一个App的结构体类型 type App struct { // The name of the program. Defaults to path.Base(os.Args[0]) Name string // Full name of command for help, defaults to Name HelpName string // Description of the…
变量的声明形式是这样的 var 变量名字 类型 = 表达式var ( AppVersion = "1.5" BuildDate, GitCommit string)类型可以被省略,这时候会通过表达式推导变量的类型,AppVersion 应该是string类型表达式可以被省略,这时候会根据零值初始化机制,初始化一个值,BuildDate, GitCommit string,初始化为"" 还可以同时声明一组变量,var()声明了一组在main函数外面声明的变量是包级变量…
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring4.3.7)分析,弄清楚Controller是如何匹配我们传入的参数,并定义简单的参数解析器 2.源码分析 demo源码在这里,回到DispatcherServlet的doDispatch方法,DispatchServlet分析见SpringMVC源码阅读:核心分发器DispatcherServle…
gocron源码中使用的是下面这个第三方包来实现的,下面就单独的拿出来测试以下效果,和官方flag包差不多 go get github.com/urfave/cli package main import ( "fmt" "log" "os" "github.com/urfave/cli" ) func main() { app := cli.NewApp() var flags []cli.Flag flags = appe…
gocron源代码中的Action那个地方,就是个空接口类型Action interface{},可以传递任意类型进去,这里是传了个函数进去 command := cli.Command{ Name: "web", Usage: "run web server", Action: runWeb, Flags: flags, } 接口是合约,任何类型只要实现了接口中的方法,那么就可以认为实现了这个接口.对于没有方法的接口interface{}类型,可以看做所有的类型都…
在阅读VictoriaMetrics的源码的时候,读到了那么平平无奇的一段: // AddRows adds the given mrs to s. func (s *Storage) AddRows(mrs []MetricRow, precisionBits uint8) error { if len(mrs) == 0 { return nil } // Limit the number of concurrent goroutines that may add rows to the s…