[英]How to construct nested structs with slices
我正在構建一個簡單的組管理器,我只與您分享相關部分。 我很難理解在沒有構造函數(尤其是復制構造函數)的類對象結構中事物是如何工作的。
主.go
var currentGroup Headers.Group
func main() {
currentGroup.New(0)
p := Headers.Process{ID: uint16(len(currentGroup.Processes)), Address: "Test"}
currentGroup.AddProcess(p)
p.PrintProcess()
currentGroup.PrintGroup()
}
我有一個名為 Process 的類
制程.go
//Process defines a Process structure
type Process struct {
ID uint16
Address string
}
type processFuncs interface {
printProcess()
}
//PrintProcess prints a process contents
func (p Process) PrintProcess() {
fmt.Printf("[P%d; %s]\n", p.ID, p.Address)
}
和一個類
組.go
// Group struct
type Group struct {
ID uint16
Processes []Process
}
//AddProcess adds a process to the group
func (G Group) AddProcess(p Process) {
G.Processes = append(G.Processes, p)
}
//PrintGroup prints the group processes
func (G Group) PrintGroup() {
fmt.Printf("=========================\nGroup %d:\n", G.ID)
for i := 0; i < len(G.Processes); i++ {
G.Processes[i].PrintProcess()
}
}
//New Group Constructor
func (G Group) New(ID uint16) {
G.ID = ID
G.Processes = make([]Process, 0)
}
屏幕Output:
[P0; Test]
=========================
Group 0:
預期屏幕 Output:
[P0; Test]
=========================
Group 0:
[P0; Test]
問題: Process p
已成功創建並打印,但未添加到currentGroup
。
問題:我所知道的是,切片append
function 按值復制。 然后,無需創建指針切片即可復制Process
對象/結構。 因此,進程結構被認為是不可分割的 object。 真的嗎? 有什么誤會嗎? 代碼有什么問題嗎?
在這里,我將為您提供一些提示。 當我開始使用 golang 時,這主要是我的學習。 請不僅匹配語法,還要匹配大小寫。
type processFuncs interface {
**printProcess**()
}
//PrintProcess prints a process contents
func (p Process) **PrintProcess**() {
fmt.Printf("[P%d; %s]\n", p.ID, p.Address)
}
另一個重點:導出以大寫字母開頭的函數、方法或變量/成員(與公共相同),以小寫開頭未導出(更像私有或更好的 package 級別訪問)。
您通常會公開您的接口並使實際類型不被導出。 添加一個新方法來創建類型 object。
其次,如果您想使用方法調用修改類型 object 使用指針引用而不是值,即
Use func (p *Process) PrintProcess(){
//... do something
}
代替
func (p Process) PrintProcess(){
//... do something
}
最重要的是 Go 不像 Java 或 C# 或任何其他 OO 語言,所以不要在 golang 中編寫 OO 代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.