美文网首页
Golang学习笔记 2018-03-29

Golang学习笔记 2018-03-29

作者: feathe_r | 来源:发表于2018-03-29 20:40 被阅读0次

    note 1 =的使用

    // = 使用必须使用先var声明例如:
    var a
    a=100//或
    var b = 100//或
    var c int = 100
    

    :=这个符号直接取代了var和type,这种形式叫做简短声明。不过它有一个限制,那就是它只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用var方式来定义全局变量。

    // := 是声明并赋值,并且系统自动推断类型,不需要var关键字
    d := 100
    note 6
    

    note2 nil

    • nil是预定义的标识符,代表指针、通道、函数、接口、映射或切片的零值,也就是预定义好的一个变量:
      • 当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常。
    var p *int
    p == nil    // true
    *p          // panic: invalid memory address or nil pointer dereference
    

    【转】https://www.jianshu.com/p/dd80f6be7969

    note 3 接口

    /* 定义接口 */
    type interface_name interface {
       method_name1 [return_type]
       method_name2 [return_type]
       method_name3 [return_type]
       ...
       method_namen [return_type]
    }
    
    /* 定义结构体 */
    type struct_name struct {
       /* variables */
    }
    
    /* 实现接口方法 */
    func (struct_name_variable struct_name) method_name1() [return_type] {
       /* 方法实现 */
    }
    ...
    func (struct_name_variable struct_name) method_namen() [return_type] {
       /* 方法实现*/
    }
    

    note 4 package

    package 结构
    1.省略前缀包名

    import (
        . "fmt"
        "os"
    )
    

    2.别名操作

    import p1 "package1"
    import p2 "package2"
    

    3.下划线(_)操作 :导入该包,但不导入整个包,而是执行该包中的init函数
    【转】https://studygolang.com/articles/5831

    note 5

    if err != nil {
        return nil, err
    }
    

    note 6

    要交换两个变量的值,则可以简单地使用 a, b = b, a

    note 7

      a = "hello"
      unsafe.Sizeof(a)
      输出结果为:16
    

    字符串类型在 go 里是个结构, 包含指向底层数组的指针和长度,这两部分每部分都是 8 个字节,所以字符串类型大小为 16 个字节。

    question 1

    func GetGroupStorageRPCClient(group_id int64) *gorpc.DispatcherClient {
    index := group_id%int64(len(group_rpc_clients))
    /**
    *?index =A % B
    */
    return group_rpc_clients[index]
    

    }

    question 2

    runtime 介绍
    https://blog.csdn.net/wangshubo1989/article/details/70799751

    question 3 flag包

    flag.Int64Var(&first, "first", 0, "first uid")
    flag.Int64Var(&last, "last", 0, "last uid")
    flag.StringVar(&local_ip, "local_ip", "0.0.0.0", "local ip")
    flag.StringVar(&host, "host", "127.0.0.1", "host")
    flag.IntVar(&port, "port", 23000, "port")
    
    flag.IntVar(&concurrent, "c", 10, "concurrent number")
    flag.IntVar(&recv_count, "r", 20, "recv number")
    flag.IntVar(&count, "n", 5000, "request number")
      flag.Parse()
      flag.Args()[index]
    len(数组)
    
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    

    question 4

    go 变量作用域

    type LoadOffline struct {
        appid  int64
        uid    int64
        device_id int64
    }
    
    func (lo *LoadOffline) ToData() []byte {
        buffer := new(bytes.Buffer)
        binary.Write(buffer, binary.BigEndian, lo.appid)
        binary.Write(buffer, binary.BigEndian, lo.uid)
        binary.Write(buffer, binary.BigEndian, lo.device_id)
        buf := buffer.Bytes()
        return buf
    }
    
    func (lo *LoadOffline) FromData(buff []byte) bool {
        if len(buff) < 24 {
            return false
        }
        buffer := bytes.NewBuffer(buff)
        binary.Read(buffer, binary.BigEndian, &lo.appid)
        binary.Read(buffer, binary.BigEndian, &lo.uid)
        binary.Read(buffer, binary.BigEndian, &lo.device_id)
        return true
    }
    

    相关文章

      网友评论

          本文标题:Golang学习笔记 2018-03-29

          本文链接:https://www.haomeiwen.com/subject/xsqycftx.html