Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ralat pelik berlaku apabila memanggil kaedah struktur GoLang

Ralat pelik berlaku apabila memanggil kaedah struktur GoLang

WBOY
WBOYke hadapan
2024-02-08 22:21:191173semak imbas

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

editor php Youzi mungkin menghadapi beberapa ralat pelik apabila menggunakan bahasa pengaturcaraan GoLang. Salah satunya ialah masalah dengan panggilan kaedah struktur. Struktur ialah jenis data biasa dalam GoLang, yang boleh mengandungi medan dan kaedah. Walau bagaimanapun, kadangkala kita menghadapi beberapa ralat yang tidak dijangka semasa memanggil kaedah struktur. Artikel ini akan menganalisis punca masalah sedemikian dan menyediakan penyelesaian untuk membantu anda memahami dan menggunakan struktur GoLang dengan lebih baik.

Kandungan soalan

Saya sedang cuba mempelajari GoLang sekarang, tetapi saya menghadapi masalah dengan salah satu tugas. Masalahnya ialah saya perlu menentukan kaedah Ammo untuk struct yang mempunyai medan Kuasa dan Tembak. Walau bagaimanapun, ia menembak saya dan bukannya musuh khayalan dan memberikan ralat berikut: compiler.go:64:20: testStruct.Shoot tidak ditentukan (jenis *Hero tidak mempunyai medan atau kaedah Shoot) Saya menyemak dokumentasi dan beberapa tutorial dan nampaknya saya mengisytiharkan kaedah itu baik. Tetapi saya mendapat ralat ini. Ini kod saya:

В рамках этого урока мы постарались представить себе уже привычные нам переменные и функции, как объекты из реальной жизни. Чтобы закрепить результат мы предлагаем вам небольшую творческую задачу.

Вам необходимо реализовать структуру со свойствами-полями 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!

Penyelesaian

Anda keliru tentang parameter fungsi dan penerima. Cuba ini, perhatikan di mana Hero berada dalam fungsi:

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

Atas ialah kandungan terperinci Ralat pelik berlaku apabila memanggil kaedah struktur GoLang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam