從切片建立類型

王林
發布: 2024-02-05 22:57:07
轉載
688 人瀏覽過

從切片建立類型

問題內容

我想建立一個像堆疊一樣的資料類型。我想在“頂部”中添加和刪除條目,並能夠將其列印出來。在此範例中,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中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!