首頁 > 後端開發 > Golang > 主體

GoLang 結構體方法呼叫出現奇怪錯誤

WBOY
發布: 2024-02-08 22:21:19
轉載
1169 人瀏覽過

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

php小編柚子在使用GoLang程式語言時,可能會遇到一些奇怪的錯誤。其中之一就是在結構體方法呼叫時出現問題。結構體是GoLang中一種常見的資料類型,它可以包含欄位和方法。然而,有時候我們在呼叫結構體方法時會遇到一些意想不到的錯誤。這篇文章將為您解析這類問題的原因,並提供解決方法,幫助您更好地理解和使用GoLang的結構體。

問題內容

現在正在嘗試學習 GoLang,但其中一項任務遇到問題。問題是我需要為具有 Ammo 和 Power 欄位的結構定義方法 Shoot 。然而,它向我射擊而不是假想的敵人,並出現以下錯誤: 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 在函數中的位置:

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)
}
登入後複製

以上是GoLang 結構體方法呼叫出現奇怪錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!