Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyalurkan Sekeping Slice sebagai Hujah yang Dibongkar kepada Fungsi Variadik dalam Go?

Bagaimana untuk Menyalurkan Sekeping Slice sebagai Hujah yang Dibongkar kepada Fungsi Variadik dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-10-28 08:20:29590semak imbas

How to Pass a Slice of Slices as Unpacked Arguments to a Variadic Function in Go?

Membongkar Slice of Slices sebagai Variadic Arguments

Masalah:
Apabila cuba menghantar sekeping hirisan sebagai hujah yang tidak dibungkus kepada variadic fungsi, ralat kompilasi berlaku. Ralat menunjukkan ketidakupayaan untuk menetapkan jenis hirisan sumber kepada jenis parameter variadik destinasi.

Penjelasan:
Menurut spesifikasi Go, fungsi dengan parameter variadic jenis .. .T menjangkakan satu keping jenis []T sebagai hujah. Walau bagaimanapun, dalam kes sekeping hirisan, [][]T, syarat ini tidak dapat dipenuhi.

Penyelesaian:
Untuk menyelesaikan isu ini, sekeping baharu jenis yang diperlukan []T mesti dicipta dan diisi dengan nilai yang dikehendaki. Potongan baharu ini kemudiannya boleh dihantar tanpa pembungkusan menggunakan operator elipsis (...).

Contoh:

<code class="go">package main

import (
    "fmt"
)

func unpack(args ...interface{}) {
    fmt.Println(len(args))
}

func main() {
    sliceOfSlices := [][]int{
        []int{1, 2},
        []int{101, 102},
    }

    // Create a new slice of type []interface{}
    sliceOfInterfaces := []interface{}{}
    for _, v := range sliceOfSlices {
        sliceOfInterfaces = append(sliceOfInterfaces, v)
    }

    unpack(sliceOfInterfaces...) // Pass unpacked values
}</code>

Output:

2

Dalam contoh ini, fungsi unpack() dipanggil dengan elemen unpacked sliceOfSlices sebagai argumen. Fungsi len() digunakan untuk menunjukkan bilangan argumen yang diluluskan, yang menunjukkan bahawa kedua-dua elemen kepingan bersarang dibongkar.

Atas ialah kandungan terperinci Bagaimana untuk Menyalurkan Sekeping Slice sebagai Hujah yang Dibongkar kepada Fungsi Variadik dalam 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