zoukankan      html  css  js  c++  java
  • Golang

    Golang 关键字

    • var和const :变量和常量的声明
    • go : 用于并行
      go 关键字用来创建 goroutine (协程),是实现并发的关键。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import "flag"

    var ip = flag.Int("flagname", 1234, "help message for flagname")

    // 下面的方式也是可以的
    var flagvar int
    func () {
    flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
    }

    自定义 flag

    需要实现 flag.Value interface:

    1
    2
    3
    4
    type Value interface {
    String() string
    Set(string) error
    }

    Example

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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 percentage
    flag.Var(&pop, "pop", "popularity")

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

    命令行

    1
    2
    3
    -flag
    -flag=x
    -flag x // 只有非bool类型的flag可以

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

    来个简单的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    package main
    import (
    "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)
    }
    }

    参考资料

  • 相关阅读:
    Java读书笔记
    b_aw_旅游计划(树的中心变形)
    b_lc_秋叶收集器(分类讨论dp+滚动数组优化)
    b_lg_涂色(从小区间做起,讨论s[l]和s[r]的关系)
    c_lc_早餐组合(排序+双指针)
    c_aw_鱼塘钓鱼(大根堆)
    b_pat_栈(2*multiset+stack)
    c_pat_推荐系统(set模拟)
    b_lg_时态同步(后序遍历统计每棵子树的最大高度)
    b_lc_统计不开心的朋友(预处理+模拟)
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12286171.html
Copyright © 2011-2022 走看看