今天看了下labrpc模块,学习了相关的golang语法。总结下
map
interface{},空的可以表示任何类型,类似java的object
struct
new 初始化零值
make map slice channel
func MakeNetwork() *Network {
rn := &Network{}
rn.reliable = true
rn.ends = map[interface{}]*ClientEnd{}
rn.enabled = map[interface{}]bool{}
rn.servers = map[interface{}]*Server{}
rn.connections = map[interface{}](interface{}){}
return rn
}
上面的函数指定了很多初始化方法
func (rn *Network) ReadEndnameInfo(endname interface{}) (bool, interface{}, *Server, bool) {
rn.mu.Lock()
defer rn.mu.Unlock()
enabled := rn.enabled[endname]
servername := rn.connections[endname]
var server *Server
if servername != nil {
server = rn.servers[servername]
}
reliable := rn.reliable
return enabled, servername, server, reliable
}
interface{}表示任何类型
func (rn *Network) IsServerDead(endname interface{}, servername interface{}, server *Server) bool {
rn.mu.Lock()
defer rn.mu.Unlock()
if rn.enabled[endname] == false || rn.servers[servername] != server {
return true
}
return false
}
定义struct的方法