Penerima berdasarkan nilai vs penerima dengan kebingungan penunjuk [duplikat]
Saya telah menulis implementasi stack sederhana. Ini bekerja seperti yang diharapkan.
package main
import "fmt"
type Stack struct {
data []interface{}
}
func (s *Stack) isEmpty() bool {
return len(s.data) == 0
}
func (s *Stack) push(item interface{}) {
s.data = append(s.data, item)
//fmt.Println(s.data, item)
}
func (s *Stack) pop() interface{} {
if len(s.data) == 0 {
return nil
}
index := len(s.data) - 1
res := s.data[index]
s.data = s.data[:index]
return res
}
func main() {
var stack Stack
stack.push("this")
stack.push("is")
stack.push("sparta!!")
for len(stack.data) > 0 {
x := stack.pop()
fmt.Println(x)
}
}
Namun, jika saya mengubah tiga metode dari penerima dengan penunjuk ke penerima dengan nilai seperti di bawah ini. Kemudian utama tidak mencetak apa pun. Tampaknya setiap kali saya menelepon metode push, tumpukan diinisialisasi ulang. Mengapa demikian?
func (s Stack) isEmpty() bool {
func (s Stack) push(item interface{}) {
func (s Stack) pop() interface{} {
Jawaban
1 LunaLovegood
Penerima nilai Go membuat salinan variabel dan membuat perubahan pada salinannya. Hanya dalam penerima referensi, stack
variabel aktual diperbarui.
Untuk lebih jelasnya, https://tour.golang.org/methods/4
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'