首頁  >  文章  >  後端開發  >  GoLang 結構體方法呼叫出現奇怪錯誤

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

WBOY
WBOY轉載
2024-02-08 22:21:191169瀏覽

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刪除