2 回答

TA貢獻1871條經驗 獲得超8個贊
您的節點未添加到原始 linkedList 的原因是因為您沒有使用指向該結構的指針。因此,即使Increment
示例代碼中的函數更改了值。結構的副本被更改,而不是實際的結構。
您可以使用指針接收器聲明方法。這意味著接收者類型對于某些類型 T 具有文字語法 *T。(此外,T 本身不能是指針,例如 *int。)
如果您想更改 linkedlistNode 結構計數器以顯示添加到列表中的節點,您應該在兩種方法上使用指針類型接收器來修改鏈表:
func?(l?*LinkedList)?AddInitialValue(v?interface{}) func?(l?*LinkedList)?LogState()
并在 main 內部將地址傳遞給 linkedList 以將這些指針類型接收器用作:
func?main()?{ ????list?:=??&LinkedList{} ????list.AddInitialValue(9) ????fmt.Println("----") ????list.LogState()?//?size:?0 ????}
筆記:-
使用指針接收器有兩個原因。
修改其接收者指向的值。
避免在每次方法調用時復制值。如果接收者是一個大結構,這會更有效

TA貢獻1735條經驗 獲得超5個贊
使用Increment
并LogState
定義了您定義它們的方式,您只使用的值的副本List
。這意味著如果您在函數內部進行一些更改,它們僅在的函數范圍Increment
內可見,并且僅在該特定范圍存在的其余部分可見。Increment
要確認您始終使用初始值的副本List
,您可以&list
在執行Increment
函數之前和&l
在同一函數內部進行記錄。
如果你想讓更改永久化,你應該使用指向內存地址的指針。這意味著你的函數應該這樣定義:
func (l *List) Increment() func (l *List) LogState()
這樣,您將傳遞一個內存引用(指向內存中地址的指針),并且每次更改 的值時l
,您都會在傳遞的內存引用上更改它,并且它會在任何地方反映出來。
- 2 回答
- 0 關注
- 164 瀏覽
添加回答
舉報