Golang

Golang 关键字

  • var和const :变量和常量的声明
  • go : 用于并行
    go 关键字用来创建 goroutine (协程),是实现并发的关键。
1234567891011
//go 关键字放在方法调用前新建一个 goroutine 并让他执行方法体go GetThingDone(param1, param2);//上例的变种,新建一个匿名方法并执行go func(param1, param2) {}(val1, val2)//直接新建一个 goroutine 并在 goroutine 中执行代码块go {    //do someting...}

Golang flag 解析入参

flag 是 go 标准库提供的解析命令行参数的包。

使用 flag.String(), Bool(), Int() 等函数注册 flag

123456789
import "flag"var ip = flag.Int("flagname", 1234, "help message for flagname")// 下面的方式也是可以的var flagvar intfunc () {	flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")}

自定义 flag

需要实现 flag.Value interface:

1234
type Value interface {     String() string     Set(string) error }

Example

123456789101112
type percentage float32 func (p *percentage) Set(s string) error {     v, err := strconv.ParseFloat(s, 32)     *p = percentage(v)     return err } func (p *percentage) String() string {     return fmt.Sprintf("%f", *p) }大专栏  Golangs="line">var pop percentageflag.Var(&pop, "pop", "popularity")

在注册完成之后,最后调用 flag.Parse()

命令行

123
-flag-flag=x-flag x  // 只有非bool类型的flag可以

可以使用1个或2个’-‘号,效果是一样的。最后一种格式不能用于 bool 类型的 flag。

来个简单的例子:

123456789101112131415161718192021222324252627
package mainimport (    "fmt"    "flag")func main(){    data_path := flag.String("D","/home/manu/sample/","DB data path")    log_file := flag.String("l","/home/manu/sample.log","log file")    nowait_flag :=flag.Bool("W",false,"do not wait until operation completes")    flag.Parse()    var cmd string = flag.Arg(0);    fmt.Printf("action   : %sn",cmd)    fmt.Printf("data path: %sn",*data_path)    fmt.Printf("log file : %sn",*log_file)    fmt.Printf("nowait     : %vn",*nowait_flag)    fmt.Printf("-------------------------------------------------------n")    fmt.Printf("there are %d non-flag input paramn", flag.NArg())    for i,param := range flag.Args() {        fmt.Printf("#%d    :%sn",i,param)    }}

参考资料

相关推荐