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
}