• 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)
    }
    }

    参考资料

  • 相关阅读:
    用位运算实现十进制转换为二进制
    【Zhejiang University PATest】02-3. 求前缀表达式的值
    【Zhejiang University PATest】02-1. Reversing Linked List
    【Tsinghua OJ】隧道(Tunel)问题
    冒泡排序及其优化
    有序向量的查找算法
    【Tsinghua OJ】灯塔(LightHouse)问题
    有序向量的去重算法
    【Tsinghua OJ】祖玛(Zuma)问题
    倒水问题(《怎样解题》中的经典问题)
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12286171.html
Copyright © 2020-2023  润新知