我上周开始学习golang,我正在用golang重写一个python项目。我知道golang基本上没有继承的概念,人们建议使用嵌入代替。在我的项目中,我有一个名为 的基础结构,一个名为 MyBase 的扩展结构。 携带2d数组的映射,每个2d数组都可以通过枚举指定的键访问。在另一个文件夹中,我有一个扩展.文件夹结构如下所示MyBaseAdvBaseMyBaseTopTeamAdvBase
root
|--- main.go
|--- base
|--- base.go (MyBase struct & AdvBase struct)
|--- commons.go
|--- team
|--- topteam
|--- tt.go (TopTeam struct)
在tt.go中,我初始化了MyBase中定义的映射,我希望它将反映在嵌入了MyBase或AdvBase的所有结构中。
// base.go
package base
import "fmt"
type MyBase struct {
max_num int
myTool map[KIND]Tool
}
func (b MyBase) SetTool( k KIND, mat [][]int) {
b.myTool[k].SetMat(mat)
}
func (b MyBase) ShowTool(k KIND) {
b.myTool[k].Show()
}
type AdvBase struct {
MyBase
}
func NewAdvBase(max_num_ int) *AdvBase {
ab := AdvBase{MyBase{max_num: max_num_}}
return &ab
}
type Tool struct {
mat [][]int
}
func (t Tool) SetMat(mat_ [][]int) {
t.mat = mat_
}
func (t Tool) Show() {
fmt.Println(t.mat)
}
// commons.go
package base
type KIND int
const (
T1 KIND = 0
T2 KIND = 1
T3 KIND = 2
T4 KIND = 3
)
// tt.go
package teams
import "base"
type TopTeam struct {
base.AdvBase
}
func NewTeam(k_ int) *TopTeam {
p := base.NewAdvBase(k_)
tt := TopTeam{*p}
T2 := base.T2
// I assign the 2d array holding by the map with key=T2
tt.SetTool(T2, [][]int {{1,2,3,4},
{4,5,6},{7,8,9,10,11}})
return &tt
}
// main.go
package main
import (
"base"
teams "team/topteam"
)
func main() {
pp := teams.NewTeam(3) // calling this should issue tt.SetTool
pp.ShowTool(base.T2) // so this line should show the assigned array
}
但是,在运行代码后,key=T2 的数组始终为空。我整个下午都在调试这个问题,但仍然不知道代码出了什么问题。
在运行时,程序中最多可以创建 10 个实例,每个 TopTeam 维护一个 映射,并且每个实例都保存一个矩阵(2d 数组),其大小或内容可能会不时更改。我希望在创建映射和工具后保持它们的地址不变,但是工具持有的数组可以更改。是否可以在 go 中实现此功能?TopTeamToolTool
梦里花落0921
相关分类