Rumah >pembangunan bahagian belakang >Golang >Perbezaan antara aliran keluaran konsol dan aliran fail media
Perbezaan antara aliran keluaran konsol dan aliran fail media adalah konsep penting dalam pembangunan program. Aliran keluaran konsol digunakan terutamanya untuk mengeluarkan maklumat semasa program berjalan ke konsol untuk memudahkan pembangun menyahpepijat dan melihat hasil yang sedang dijalankan. Aliran fail media digunakan untuk membaca dan menulis fail media, seperti audio, video, dsb. Terdapat beberapa perbezaan dalam senario penggunaan, pemprosesan data dan aplikasi antara kedua-duanya Adalah sangat penting bagi pembangun untuk memahami dan menguasai perbezaan ini. Seterusnya kita akan meneroka perbezaan dan petua penggunaan antara keduanya secara terperinci.
Saya menghadapi masalah cuba memaparkan GIF dalam Go. Fail GIF output tidak boleh dibuka menggunakan satu kaedah, tetapi boleh dibuka secara normal menggunakan kaedah lain. Saya menemui Rendering .gif dalam Go tetapi ia tidak menyelesaikan masalah khusus saya.
Ini adalah kod yang dimaksudkan:
package main import ( "bufio" "fmt" "image" "image/color" "image/gif" "io" "math" "math/rand" "os" "time" ) var palette = []color.Color{color.White, color.Black} const ( whiteIndex = 0 blackIndex = 1 ) func main() { w := bufio.NewWriter(os.Stdout) lissajous(w) } func lissajous(out io.Writer) { const ( cycles = 5 res = 0.001 size = 100 nframes = 64 delay = 8 ) rand.Seed(time.Now().UTC().UnixNano()) freq := rand.Float64() * 3.0 anim := gif.GIF{LoopCount: nframes} phase := 0.0 for i := 0; i < nframes; i++ { rect := image.Rect(0, 0, 2 * size+1, 2 * size + 1) img := image.NewPaletted(rect, palette) for t := 0.0; t < cycles * 2 * math.Pi; t += res { x := math.Sin(t) y := math.Sin(t * freq + phase) img.SetColorIndex(size + int(x * size + 0.5), size + int(y * size + 0.5), blackIndex) } phase += 0.1 anim.Delay = append(anim.Delay, delay) anim.Image = append(anim.Image, img) } err := gif.EncodeAll(out, &anim) if err != nil { return } else { fmt.Println(err) } }
Berikut adalah arahan:
go build main.go
main > out.gif
Kemudian, out.gif tidak boleh dibuka. Kaedah ini berkesan walaupun:
func main() { fileName := "out.gif" f, err3 := os.Create(fileName) if err3 != nil { fmt.Println("create file fail") } w := bufio.NewWriter(f) lissajous(w) w.Flush() f.Close() }
Saya keliru mengapa kaedah pertama tidak mencipta fail GIF berfungsi, tetapi kaedah kedua melakukannya. Adakah ini berkaitan dengan cara Go mengendalikan penulisan atau penimbalan fail?
Menurut @CeriseLimón Nota :
func main() { w := bufio.NewWriter(os.Stdout) lissajous(w) w.Flush() }
Atas ialah kandungan terperinci Perbezaan antara aliran keluaran konsol dan aliran fail media. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!