Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk lulus parameter fungsi golang
Terdapat tiga cara untuk menghantar parameter fungsi dalam Go: mengikut nilai, dengan rujukan dan dengan penuding. Lalai adalah untuk lulus mengikut nilai, lulus melalui rujukan perlu menggunakan jenis penunjuk, lulus dengan penunjuk terus lulus penunjuk. Apabila anda perlu mengubah suai pembolehubah luaran atau berkongsi data dengan cekap, pilih lulus dengan rujukan atau dengan penuding masing-masing.
Cara menghantar parameter fungsi Go
Parameter fungsi Go boleh diluluskan melalui nilai, rujukan atau penuding. Memilih kaedah hantaran yang betul adalah penting untuk memastikan fungsi anda berfungsi dengan baik dan mengelakkan peruntukan memori yang tidak perlu.
Pass by value
Kaedah lulus ini menghantar salinan parameter fungsi kepada fungsi. Sebarang perubahan yang dibuat pada salinan tidak akan menjejaskan pembolehubah asal. Ia adalah kaedah penghantaran lalai.
Contoh:
func changeValue(x int) { x++ } func main() { a := 5 changeValue(a) fmt.Println(a) // 输出:5 }
Lulus dengan rujukan
Lulus rujukan menggunakan alamat hujah, bukan salinan. Oleh itu, sebarang perubahan yang dibuat pada parameter akan mempengaruhi pembolehubah asal. Untuk menghantar parameter melalui rujukan, anda perlu menggunakan jenis penunjuk (*).
Contohnya:
func changeRef(x *int) { *x++ } func main() { a := 5 changeRef(&a) fmt.Println(a) // 输出:6 }
Lewati penunjuk
Lewati penunjuk adalah serupa dengan rujukan melalui, tetapi ia terus melalui penunjuk itu sendiri dan bukannya alamat. Kaedah lulus ini membantu berkongsi data dengan cekap antara fungsi kerana ia mengelakkan peruntukan memori.
Contohnya:
type Node struct { value int next *Node } func changePtr(node *Node) { node.value++ } func main() { root := &Node{5, nil} changePtr(root) fmt.Println(root.value) // 输出:6 }
Contoh praktikal:
Pertimbangkan fungsi yang mengendalikan input dan output fail, yang mengambil laluan fail dan kandungan fail sebagai parameter. Melepasi laluan fail dengan rujukan menjimatkan overhed membuat salinan baharu.
func processFile(path string, contents []byte) { // 处理文件 path 和内容 contents } func main() { path := "myfile.txt" contents := readFile() processFile(path, contents) // 后续处理 }
Kaedah lulus mana yang hendak dipilih
Kaedah lulus mana yang hendak dipilih bergantung pada tujuan dan keperluan prestasi fungsi:
Atas ialah kandungan terperinci Bagaimana untuk lulus parameter fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!