我想建立一個像堆疊一樣的資料類型。我想在“頂部”中添加和刪除條目,並能夠將其列印出來。在此範例中,xpath 類型用於遍歷 xml 文件並追蹤當前路徑。
所以我建立了一個xpath[]string類型,並寫了對應的函數,即:push() pop()和string()。
我的問題是類型失去了狀態,這讓我有點困惑,因為我認為切片是引用類型。另外,如果我嘗試將函數更改為指標接收器,我會遇到幾個編譯錯誤。此時為了解決這個問題,我只是將 []string 更改為具有單一 []string 欄位的結構。儘管它仍然困擾著我,但我無法僅使用切片作為基礎類型來使其工作。
正確的做法是什麼?
package main import ( "fmt" "strings" ) type xPath []string func (xp xPath) push(entry string) { xp = append(xp, entry) } func (xp xPath) String() string { sb := strings.Builder{} sb.WriteString("/") sb.WriteString(strings.Join(xp, "/")) return sb.String() } func main() { xp := xPath{} xp.push("rss") xp.push("channel") xp.push("items") fmt.Println(xp) // Output: / // Wanted: /rss/channel/items }
您的推送功能沒有執行任何操作。
正確的推送功能:
func (xp *xPath) push(entry string) { *xp = append(*xp, entry) }
在您想要變更其值(例如使用索引)的情況下,切片是參考類型。
另一方面,如果您想重新分配它們並替換整個切片,則應該使用指標。
關於堆疊,還有一些更好的方法: 看看這個問題。
以上是從切片建立類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!