Terokai prinsip di sebalik tabir inferens jenis fungsi Golang

WBOY
Lepaskan: 2024-04-20 09:57:02
asal
642 orang telah melayarinya

Penolakan jenis fungsi membolehkan parameter dan jenis nilai pulangan fungsi Go ditinggalkan, dan pengkompil membuat kesimpulan jenis berdasarkan badan fungsi. 1. Penggunaan: Tinggalkan pengisytiharan jenis, seperti func sum(x, y int) int { return x + y }. 2. Di sebalik tabir: Pengkompil membuat kesimpulan bahawa jenis nilai pulangan ialah jenis ungkapan dalam fungsi, dan jenis parameter ialah jenis parameter panggilan fungsi. . Pengkompil membuat kesimpulan jenis ini daripada badan fungsi pada masa penyusunan.

探索 Golang 函数类型推导的幕后原理Cara menggunakan inferens jenis fungsi

Untuk menggunakan inferens jenis dalam fungsi, tinggalkan sahaja jenis parameter dan jenis nilai pulangan, seperti ini:

func sum(x, y int) int {
    return x + y
}
Salin selepas log masuk

Apa yang berlaku di sebalik tabir

Apabila menemui sesuatu compiler seperti fungsi ini, ia menyimpulkan jenis berdasarkan badan fungsi. Mula-mula, ia akan mencari pernyataan pulangan pertama bagi fungsi:

return x + y
Salin selepas log masuk

Jenis ungkapan x + y dalam pernyataan ini ialah int. Oleh itu, pengkompil membuat kesimpulan bahawa jenis nilai pulangan bagi fungsi sum ialah int.

Seterusnya, pengkompil menyemak jenis parameter dalam panggilan fungsi. Dalam contoh ini, fungsi sum dipanggil seperti berikut:

fmt.Println(sum(1, 2))
Salin selepas log masuk
Fungsi fmt.Println menjangkakan nilai jenis int sebagai parameter . Oleh itu, pengkompil membuat kesimpulan bahawa jenis parameter bagi fungsi sum juga daripada jenis int.

Kes praktikal

x + y 表达式类型为 int。因此,编译器会推断出 sum 函数的返回值类型为 int

接下来,编译器会检查函数调用中的参数类型。在本例中,sum 函数被调用如下:

package main

import "fmt"

func average(x, y int) float64 {
    return float64(x+y) / 2
}

func main() {
    fmt.Println(average(10, 20))
}
Salin selepas log masuk

fmt.Println 函数期望一个 int 类型的值作为参数。因此,编译器会推断出 sum 函数的参数类型也为 int

实战案例

让我们使用类型推导编写一个简单的程序来计算两个数的平均值:

rrreee

在这个程序中,average 函数的参数类型和返回值类型都没有指定。编译器会根据函数体推断出这些类型为 intfloat64Mari kita tulis atur cara mudah untuk mengira purata dua nombor menggunakan potongan jenis:

rrreee

Dalam atur cara ini, jenis parameter dan nilai pulangan purata fungsi Jenis-jenis tidak dinyatakan. Pengkompil membuat kesimpulan jenis ini daripada badan fungsi sebagai int dan float64.

Kesimpulan

🎜Inferens jenis fungsi menjadikan penulisan kod Go mudah dan pantas. Ia membolehkan pengaturcara menumpukan pada logik fungsi tanpa perlu risau tentang pengisytiharan jenis. Dengan memahami perkara yang berlaku di sebalik tabir, kami boleh memanfaatkan ciri ini dengan lebih baik. 🎜

Atas ialah kandungan terperinci Terokai prinsip di sebalik tabir inferens jenis fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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