Golang学习笔记 2018-03-29

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)