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
WBOYnach vorne
2024-02-08 22:21:191221Durchsuche

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!

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)
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen