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

WBOY
リリース: 2024-02-08 22:21:19
転載
1169 人が閲覧しました

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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!