Ralat pelik berlaku apabila memanggil kaedah struktur GoLang

WBOY
Lepaskan: 2024-02-08 22:21:19
ke hadapan
1169 orang telah melayarinya

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!
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!