Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Melaksanakan Penjana Gaya Python dalam Go?

Bagaimanakah Saya Boleh Melaksanakan Penjana Gaya Python dalam Go?

DDD
Lepaskan: 2024-11-19 11:25:03
asal
894 orang telah melayarinya

How Can I Implement Python-Style Generators in Go?

Penjana Gaya Python dalam Go

Pelaksanaan

Dalam Python, penjana ialah binaan yang mudah untuk mencipta iterator. Goroutines dalam Go menawarkan kefungsian yang serupa. Berikut ialah pelaksanaan Go bagi penjana gaya Python untuk jujukan Fibonacci:

package main

import "fmt"

// Fibonacci generates the Fibonacci sequence into a channel.
func fibonacci(c chan int) {
    x, y := 1, 1

    for {
        c <- x
        x, y = y, x+y
    }
}

func main() {
    c := make(chan int)
    go fibonacci(c)

    for i := 0; i < 10; i++ {
        fmt.Println(<-c)
    }
}
Salin selepas log masuk

Prestasi dan Pengurusan Memori

Saiz Penampan:

Meningkatkan saiz penimbal saluran (cth., hingga 10) berkemungkinan akan meningkatkan prestasi dengan mengurangkan suis konteks. Walau bagaimanapun, ini mengorbankan penggunaan memori.

Pengurusan Memori:

Dalam kod di atas, goroutine fibonacci berjalan selama-lamanya, menunggu bacaan daripada saluran c . Saluran c tidak ditutup, membawa kepada kebocoran memori. Berikut ialah pelaksanaan alternatif yang menangani perkara ini:

func fib(n int) chan int {
    c := make(chan int)
    go func() {
        x, y := 0, 1
        for i := 0; i <= n; i++ {
            c <- x
            x, y = y, x+y
        }
        close(c)
    }()
    return c
}
Salin selepas log masuk

Dalam kes ini, goroutine ditamatkan apabila n nombor Fibonacci telah dijana. Saluran ditutup, mengakibatkan pembersihannya oleh pemungut sampah.

Pertimbangan Lain

Untuk senario di mana bilangan nilai yang dijana tidak diketahui, pertimbangkan untuk menggunakan saluran berhenti yang berasingan untuk memberi isyarat kepada goroutine penjana bila nak berhenti. Ini diterangkan dalam tutorial Golang: https://tour.golang.org/concurrency/4.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Penjana Gaya Python dalam Go?. 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