Heim > Backend-Entwicklung > Golang > Beim Aufruf der GoLang-Strukturmethode tritt ein seltsamer Fehler auf

Beim Aufruf der GoLang-Strukturmethode tritt ein seltsamer Fehler auf

WBOY
Freigeben: 2024-02-08 22:21:19
nach vorne
1231 Leute haben es durchsucht

GoLang 结构体方法调用出现奇怪错误

php-Editor Youzi kann bei der Verwendung der Programmiersprache GoLang auf seltsame Fehler stoßen. Eines davon ist ein Problem mit Strukturmethodenaufrufen. Struktur ist ein allgemeiner Datentyp in GoLang, der Felder und Methoden enthalten kann. Beim Aufruf von Strukturmethoden treten jedoch manchmal unerwartete Fehler auf. In diesem Artikel werden die Ursachen solcher Probleme analysiert und Lösungen bereitgestellt, die Ihnen helfen, die Strukturen von GoLang besser zu verstehen und zu verwenden.

Frageninhalt

Ich versuche gerade, GoLang zu lernen, bin aber bei einer der Aufgaben auf ein Problem gestoßen. Das Problem ist, dass ich die Methode Ammo für eine Struktur definieren muss, die Power- und Shoot-Felder hat. Es schießt jedoch auf mich statt auf den imaginären Feind und gibt die folgende Fehlermeldung aus: Compiler.go:64:20: testStruct.Shoot ist undefiniert (Typ *Hero hat kein Feld oder keine Methode Shoot) Ich habe die Dokumentation und einige Tutorials überprüft und es scheint, als würde ich die Methode für in Ordnung erklären. Aber ich bekomme diesen Fehler. Das ist mein 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!
Nach dem Login kopieren

Lösung

Sie sind verwirrt über Funktionsparameter und Empfänger. Probieren Sie Folgendes aus und achten Sie darauf, wo sich Hero in der Funktion befindet:

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)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeim Aufruf der GoLang-Strukturmethode tritt ein seltsamer Fehler auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage