Maison >développement back-end >Golang >Une erreur étrange se produit lors de l'appel de la méthode de structure GoLang
Éditeur php Youzi peut rencontrer des erreurs étranges lors de l'utilisation du langage de programmation GoLang. L’un d’eux est un problème avec les appels de méthodes de structure. La structure est un type de données courant dans GoLang, qui peut contenir des champs et des méthodes. Cependant, nous rencontrons parfois des erreurs inattendues lors de l’appel des méthodes de structure. Cet article analysera les causes de ces problèmes et proposera des solutions pour vous aider à mieux comprendre et utiliser les structures de GoLang.
J'essaie d'apprendre GoLang maintenant, mais j'ai rencontré un problème avec l'une des tâches. Le problème est que je dois définir la méthode Ammo pour une structure qui a des champs Power et Shoot. Cependant, il me tire dessus à la place de l'ennemi imaginaire et donne l'erreur suivante : compiler.go:64:20 : testStruct.Shoot n'est pas défini (type *Hero n'a pas de champ ni de méthode Shoot) J'ai vérifié la documentation et quelques tutoriels et il semble que je déclare la méthode correcte. Mais j'obtiens cette erreur. Voici mon code :
В рамках этого урока мы постарались представить себе уже привычные нам переменные и функции, как объекты из реальной жизни. Чтобы закрепить результат мы предлагаем вам небольшую творческую задачу. Вам необходимо реализовать структуру со свойствами-полями 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!
Vous êtes confus au sujet des paramètres de fonction et des récepteurs. Essayez ceci, notez où se trouve Hero dans la fonction :
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) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!