Di GO, kaedah adalah fungsi dengan hujah penerima khas. Penerima muncul dalam senarai hujahnya sendiri antara kata kunci func
dan nama kaedah. Kaedah dikaitkan dengan jenis dan boleh digunakan untuk melaksanakan operasi pada nilai -nilai jenis tersebut. Konsep ini sama dengan pengaturcaraan berorientasikan objek di mana kaedahnya pada dasarnya berfungsi dengan kelas atau objek. Walau bagaimanapun, GO tidak mempunyai kelas, jadi kaedah dilampirkan terus ke jenis.
Kaedah membolehkan anda menentukan tingkah laku yang boleh dilakukan pada contoh jenis. Sebagai contoh, anda mungkin menentukan kaedah untuk mengemas kini medan struktur atau untuk melakukan beberapa pengiraan berdasarkan bidang Struct. Ini menjadikan kod anda lebih mudah dibaca dan teratur, kerana fungsi yang berkaitan dikumpulkan bersama dengan data yang dikendalikannya.
Untuk menentukan kaedah dalam GO, anda menggunakan sintaks berikut:
<code class="go">func (receiver ReceiverType) MethodName(parameters) returnType { // Method body }</code>
Inilah pecahan komponen:
func
adalah kata kunci untuk memulakan fungsi atau pengisytiharan kaedah.(receiver ReceiverType)
Menentukan penerima. ReceiverType
boleh menjadi struct atau mana -mana jenis lain, dan receiver
adalah nama yang anda berikan kepada parameter penerima dalam kaedah.MethodName
adalah nama kaedah.parameters
adalah parameter kaedah yang diambil, sama dengan fungsi.returnType
adalah jenis nilai yang dikembalikan oleh kaedah, jika ada. Sebagai contoh, jika anda mempunyai struktur Person
dan ingin menentukan kaedah untuk menetapkan umur orang itu, anda boleh melakukannya seperti ini:
<code class="go">type Person struct { Name string Age int } func (p *Person) SetAge(newAge int) { p.Age = newAge }</code>
Dalam contoh ini, SetAge
adalah kaedah pada jenis Person
, dan ia mengubah medan Age
contoh Person
.
Perbezaan utama antara kaedah dan fungsi dalam GO ialah kaedah mempunyai hujah penerima, sementara fungsi tidak. Hujah penerima ini membolehkan kaedah itu dikaitkan dengan jenis tertentu, yang menjadikan kaedah ini boleh dipanggil pada contoh jenis itu.
Berikut adalah perbezaan utama:
person.SetAge(30)
). Fungsi dipanggil secara langsung (contohnya, SetAge(person, 30)
).instance.Method()
) adalah berbeza daripada memanggil fungsi ( Function(instance)
).Di GO, kaedah boleh dikaitkan dengan hampir semua jenis, tetapi terdapat beberapa sekatan:
Jenis Asas : Anda boleh menentukan kaedah pada jenis asas seperti int
, float64
, string
, dan lain -lain, tetapi anda perlu menentukan jenis baru berdasarkan jenis asas ini terlebih dahulu. Contohnya:
<code class="go">type MyInt int func (m MyInt) Double() int { return int(m * 2) }</code>
Structs : Kaedah boleh dikaitkan secara langsung dengan structs, yang merupakan kes penggunaan yang paling biasa.
<code class="go">type Rectangle struct { width, height float64 } func (r Rectangle) Area() float64 { return r.width * r.height }</code>
Array dan kepingan : Anda tidak boleh mengaitkan kaedah secara langsung dengan tatasusunan atau kepingan, tetapi anda boleh membuat jenis yang membungkus array atau kepingan dan kemudian mengaitkan kaedah dengan jenis itu.
<code class="go">type IntSlice []int func (s IntSlice) Sum() int { sum := 0 for _, v := range s { sum = v } return sum }</code>
Pointers : Anda boleh menentukan kaedah pada jenis penunjuk, yang sering berguna untuk mengubah keadaan penerima.
<code class="go">type Counter int func (c *Counter) Increment() { *c }</code>
Ringkasnya, semasa anda boleh mengaitkan kaedah dengan pelbagai jenis di GO, anda biasanya perlu menentukan jenis baru jika anda ingin menggunakan kaedah dengan jenis asas atau susunan/kepingan.
Atas ialah kandungan terperinci Apakah kaedah dalam GO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!