1,详解slice
https://www.jianshu.com/p/030aba2bff41
2,详解Map
https://mp.weixin.qq.com/s/Jq65sSHTX-ucSG8TlI5Zxg
//错误代码
this.tombPlayerData = make(map[AvatarID]TTombPlayerData)
this.ParentZone.GetSpaceHolder().ForeachPlayer(func(player INodePlayer) bool {
this.tombPlayerData[player.GetAvatarID()].RoleName = player.GetName()
this.tombPlayerData[player.GetAvatarID()].Profession = int32(player.GetProfession())
return true
})
//纠正
this.tombPlayerData = make(map[AvatarID]*TTombPlayerData)
this.ParentZone.GetSpaceHolder().ForeachPlayer(func(player INodePlayer) bool {
this.tombPlayerData[player.GetAvatarID()] = &TTombPlayerData{}
this.tombPlayerData[player.GetAvatarID()].Profession = int32(player.GetProfession())
return true
})
3,结构体作为map的元素时,不能直接赋值给结构体的某个字段
//错误代码,编译器报错:reports assignments direcliy to a struct field of a map
var npcPos = make(map[int32]Vector3)
npcPos[0].X = 0
npcPos[0].Y = 0
npcPos[0].Z = 0
//纠正
npcPos[0] = Vector3{X: float32(pos[0]), Y: float32(pos[1]), Z: float32(pos[2])}
详解:https://blog.youkuaiyun.com/zhngcho/article/details/82424962
4,强转
A(interface类型)强转成B(struct),从而使用B中的一些接口,但前提是A中的所有接口在B中必须得有实现
type IA interface {
GetName(id int) string
GetID(name string) int
}
type TB struct {
mapData map[int]*TC
...
}
func (this *TB) GetName(id int) string {
...
}
func (this *TB) GetID(name string) int {
...
}
...
func (this *TB) GetDataInfo(id int) *TC {
return this.mapData[id]
}
使用:
GetIA().(TB).GetDataInfo(id)