Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah kaedah ditakrifkan dan digunakan dalam bahasa Go?

Bagaimanakah kaedah ditakrifkan dan digunakan dalam bahasa Go?

PHPz
PHPzasal
2023-06-10 08:16:361651semak imbas

Bahasa Go ialah bahasa pengaturcaraan yang popular sejak beberapa tahun kebelakangan ini, ia digemari oleh pembangun kerana kesederhanaan, kecekapan, keselarasannya dan ciri-ciri lain. Antaranya, kaedah juga merupakan konsep yang sangat penting dalam bahasa Go. Seterusnya, artikel ini akan memperkenalkan secara terperinci definisi dan penggunaan kaedah dalam bahasa Go.

1. Definisi kaedah

Kaedah dalam bahasa Go ialah fungsi dengan penerima (Penerima), iaitu fungsi terikat kepada jenis tertentu. Penerima boleh menjadi jenis nilai atau jenis penunjuk. Parameter untuk penerima boleh ditakrifkan sebelum nama kaedah. Format definisi kaedah

adalah seperti berikut:

func (接收器变量 接收器类型) 方法名(参数列表) (返回值列表) {
    // 方法体
}

Antaranya, pembolehubah penerima ialah pengecam, jenis penerima ialah nama jenis, dan sepasang kurungan digunakan antara jenis penerima dan senarai parameter.

Berikut ialah contoh untuk memahami definisi kaedah dengan lebih terperinci:

package main

import "fmt"

type Person struct {
    name string
    age  int
}

// 带有接收器的方法
func (p Person) sayHello() {
    fmt.Printf("Hi, my name is %s. I am %d years old.
", p.name, p.age)
}

func main() {
    // 创建一个 Person 实例
    person := Person{"Tom", 18}
    // 调用方法
    person.sayHello()
}

Dalam contoh di atas, kami mentakrifkan struktur Orang, yang mempunyai dua medan: nama dan umur , kaedah sayHello ditakrifkan pada struktur ini. Kaedah ini hanya menerima penerima, iaitu p Orang, menunjukkan bahawa kaedah tersebut ialah kaedah contoh jenis Orang. Medan dalam penerima boleh dipanggil terus dalam kaedah

, jadi medan nama dan umur p boleh diakses terus dalam kaedah sayHello.

2. Penggunaan kaedah

Dalam bahasa Go, kaedah penggunaannya sangat mudah, anda hanya perlu memanggilnya melalui nama instance.method (). Berikut ialah contoh yang lebih kompleks yang menunjukkan panggilan kaedah dan penggunaan penerima jenis penuding:

package main

import "fmt"

type Point struct {
    x, y float64
}

// 普通实例方法
func (p Point) Distance(q Point) float64 {
    return ((p.x-q.x)*(p.x-q.x) + (p.y-q.y)*(p.y-q.y)) // 勾股定理求距离
}

// 指针类型接收器方法
func (p *Point) ScaleBy(factor float64) {
    p.x *= factor
    p.y *= factor
}

func main() {
    p1 := Point{1, 1}
    p2 := Point{4, 5}

    fmt.Printf("p1 到 p2 的距离为:%f
", p1.Distance(p2))

    p1.ScaleBy(2)
    fmt.Printf("p1 缩放后的坐标为:(%f, %f)
", p1.x, p1.y)
}

Dalam contoh di atas, kami mentakrifkan struktur Titik yang mempunyai dua medan x dan y. Kami mentakrifkan dua kaedah Distance dan ScaleBy dan mengikatnya pada struktur Point.

Jarak ialah kaedah contoh biasa, yang menerima parameter jenis Titik lain dan mengembalikan float64. Kaedah ini digunakan untuk mengira jarak antara dua titik.

Selain itu, kami juga mentakrifkan kaedah penerima jenis penuding ScaleBy, yang digunakan untuk menskalakan tika Point mengikut nisbah tertentu. Penerima kaedah ini ialah jenis penunjuk, jadi semua perubahan kepada p dalam ScaleBy digunakan secara langsung pada contoh asal.

Akhir sekali, dalam fungsi utama, kami mencipta dua kejadian Titik p1 dan p2 dan memanggil kaedah Jarak dan SkalaBy. Memandangkan panggilan kaedah dalam Go tidak begitu rumit seperti dalam bahasa berorientasikan objek lain, kod ini sangat ringkas.

Kesimpulan

Melalui pengenalan di atas, saya harap anda telah memahami definisi dan penggunaan kaedah dalam bahasa Go Pelbagai jenis penerima boleh mencapai fungsi yang berbeza, menjadikan kaedah dalam bahasa Go sangat fleksibel. Penggunaan kaedah bukan sahaja sangat penting dalam pengaturcaraan berorientasikan objek, tetapi juga konsep teras dalam pengaturcaraan berfungsi. Jadi menguasai penggunaan kaedah bahasa Go sangat bermanfaat.

Atas ialah kandungan terperinci Bagaimanakah kaedah ditakrifkan dan digunakan dalam bahasa Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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