ホームページ  >  記事  >  バックエンド開発  >  GoLang 構造メソッドを呼び出すときに奇妙なエラーが発生する

GoLang 構造メソッドを呼び出すときに奇妙なエラーが発生する

WBOY
WBOY転載
2024-02-08 22:21:191169ブラウズ

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

php エディター Youzi で GoLang プログラミング言語を使用すると、奇妙なエラーが発生する場合があります。そのうちの 1 つは、構造体のメソッド呼び出しに関する問題です。構造体は GoLang の一般的なデータ型であり、フィールドとメソッドを含めることができます。ただし、構造メソッドを呼び出すときに予期しないエラーが発生する場合があります。この記事では、そのような問題の原因を分析し、GoLang の構造をよりよく理解して使用するのに役立つ解決策を提供します。

質問内容

現在 GoLang を学習しようとしているのですが、タスクの 1 つで問題が発生しました。問題は、Power フィールドと Shoot フィールドを持つ構造体に対してメソッド Ammo を定義する必要があることです。ただし、仮想敵ではなく私に向かって発砲し、次のエラーが表示されます。 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 の位置に注意してください:

リーリー

以上がGoLang 構造メソッドを呼び出すときに奇妙なエラーが発生するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。