Rumah > pembangunan bahagian belakang > Golang > Buat jenis daripada slice

Buat jenis daripada slice

王林
Lepaskan: 2024-02-05 22:57:07
ke hadapan
777 orang telah melayarinya

Buat jenis daripada slice

Kandungan soalan

Saya mahu mencipta jenis data seperti tindanan. Saya mahu menambah dan mengalih keluar masukan "di bahagian atas" dan boleh mencetaknya. Dalam contoh ini, jenis xpath digunakan untuk melintasi dokumen xml dan menjejaki laluan semasa.

Jadi saya mencipta xpath[]jenis rentetan dan menulis fungsi yang sepadan, iaitu: push() pop() dan string().

Masalah saya ialah jenis itu hilang keadaannya, yang agak mengelirukan saya kerana saya fikir kepingan adalah jenis rujukan. Juga, jika saya cuba menukar fungsi kepada penerima penunjuk, saya mendapat beberapa ralat kompilasi. Untuk membetulkannya pada ketika ini, saya hanya menukar [] rentetan kepada struct dengan medan rentetan [] tunggal. Walaupun ia masih mengganggu saya bahawa saya tidak dapat membuatnya berfungsi dengan hanya menggunakan slice sebagai jenis asas.

Apakah pendekatan yang betul?

package main

import (
    "fmt"
    "strings"
)

type xPath []string

func (xp xPath) push(entry string) {
    xp = append(xp, entry)
}

func (xp xPath) String() string {
    sb := strings.Builder{}
    sb.WriteString("/")
    sb.WriteString(strings.Join(xp, "/"))
    return sb.String()
}

func main() {
    xp := xPath{}
    xp.push("rss")
    xp.push("channel")
    xp.push("items")
    fmt.Println(xp)

    // Output: /
    // Wanted: /rss/channel/items
}
Salin selepas log masuk


Jawapan betul


Fungsi tolak anda tidak melakukan apa-apa.

Fungsi tolak yang betul:

func (xp *xPath) push(entry string) {
    *xp = append(*xp, entry)
}
Salin selepas log masuk

Sepotong ialah jenis rujukan dalam situasi di mana anda ingin menukar nilainya (cth. menggunakan indeks).

Sebaliknya, jika anda ingin mengagihkannya semula dan menggantikan keseluruhan kepingan, anda harus menggunakan penunjuk.

Mengenai tindanan, terdapat beberapa cara yang lebih baik: Semak soalan ini.

Atas ialah kandungan terperinci Buat jenis daripada slice. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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