php小編柚子在使用GoLang程式語言時,可能會遇到一些奇怪的錯誤。其中之一就是在結構體方法呼叫時出現問題。結構體是GoLang中一種常見的資料類型,它可以包含欄位和方法。然而,有時候我們在呼叫結構體方法時會遇到一些意想不到的錯誤。這篇文章將為您解析這類問題的原因,並提供解決方法,幫助您更好地理解和使用GoLang的結構體。
現在正在嘗試學習 GoLang,但其中一項任務遇到問題。問題是我需要為具有 Ammo 和 Power 欄位的結構定義方法 Shoot 。然而,它向我射擊而不是假想的敵人,並出現以下錯誤: compiler.go:64:20: testStruct.Shoot 未定義(類型 *Hero 沒有欄位或方法 Shoot) 我檢查了文檔和一些教程,似乎我很好地聲明了方法。但是我收到這個錯誤。這是我的程式碼:
В рамках этого урока мы постарались представить себе уже привычные нам переменные и функции, как объекты из реальной жизни. Чтобы закрепить результат мы предлагаем вам небольшую творческую задачу. Вам необходимо реализовать структуру со свойствами-полями On, Ammo и Power, с типами bool, int, int соответственно. У этой структуры должны быть методы: Shoot и RideBike, которые не принимают аргументов, но возвращают значение bool. Если значение On == false, то оба метода вернут false. Делать Shoot можно только при наличии Ammo (тогда Ammo уменьшается на единицу, а метод возвращает true), если его нет, то метод вернет false. Метод RideBike работает также, но только зависит от свойства Power. Чтобы проверить, что вы все сделали правильно, вы должны создать указатель на экземпляр этой структуры с именем testStruct в функции main, в дальнейшем программа проверит результат. Закрывающая фигурная скобка в конце main() вам не видна, но она есть. Пакет main объявлять не нужно! Удачи! #code tpl: func main() { // testStruct := /* * Экземпляр созданной вами структуры необходимо передать в качестве * аргумента функции testStruct, которая выполнит проверку соблюдения * всех условий задания/ // } */ package main import ( "fmt" ) type Hero struct { On bool Ammo, Power int } func Shoot(h Hero) bool { if !h.On { return false } if h.Ammo>0 { h.Ammo-- return true } else { return false } } func RideBike(h Hero) bool { if !h.On { return false } if h.Power>0 { h.Power-- return true } else { return false } } func main() { testStruct := new(Hero) testStruct.On = true testStruct.Ammo = 10 testStruct.Power = 100 fmt.Println (testStruct) res := testStruct.Shoot() fmt.Println (testStruct) }``` Could you please tell me what I am doing wrong? Thank you! Sorry for my English -it's bot my bative language. Thank you again!
您對函數參數和接收者感到困惑。 請嘗試此操作,注意 Hero 在函數中的位置:
package main import ( "fmt" ) type Hero struct { On bool Ammo, Power int } func (h *Hero) Shoot() bool { if !h.On { return false } if h.Ammo > 0 { h.Ammo-- return true } else { return false } } func (h *Hero) RideBike() bool { if !h.On { return false } if h.Power > 0 { h.Power-- return true } else { return false } } func main() { testStruct := new(Hero) testStruct.On = true testStruct.Ammo = 10 testStruct.Power = 100 fmt.Println(testStruct) res := testStruct.Shoot() fmt.Println(res) print(testStruct.Ammo) }
以上是GoLang 結構體方法呼叫出現奇怪錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!