Cara Mencetak Output ke Tetingkap Perintah untuk Aplikasi GUI Disusun dengan -ldflags -H=windowsgui
Menyusun aplikasi Go dengan -ldflags - H=windowsgui untuk digunakan sebagai antara muka pengguna grafik (GUI) boleh memberikan cabaran dalam mencetak output kepada tetingkap arahan. Ini kerana proses GUI pada Windows biasanya tidak dikaitkan dengan konsol.
Masalah
Apabila aplikasi disusun dengan bendera -H=windowsgui, cuba mencetak output menggunakan kaedah standard seperti println atau fmt.Println menyebabkan tiada apa-apa yang dipaparkan dalam arahan tetingkap.
Penyelesaian
Untuk mencetak output dalam senario ini, anda perlu melampirkan proses secara eksplisit pada konsol proses induknya. Ini boleh dicapai menggunakan fungsi API AttachConsole, yang boleh diakses melalui pakej syscall:
package main import ( "fmt" "syscall" ) const ( ATTACH_PARENT_PROCESS = ^uint32(0) // (DWORD)-1 ) var ( modkernel32 = syscall.NewLazyDLL("kernel32.dll") procAttachConsole = modkernel32.NewProc("AttachConsole") ) func AttachConsole(dwParentProcess uint32) (ok bool) { r0, _, _ := syscall.Syscall(procAttachConsole.Addr(), 1, uintptr(dwParentProcess), 0, 0) ok = bool(r0 != 0) return } func main() { ok := AttachConsole(ATTACH_PARENT_PROCESS) if ok { fmt.Println("Okay, attached") } }
Panggil AttachConsole(ATTACH_PARENT_PROCESS) sebelum cuba mencetak output, yang akan menyambungkan proses ke konsol induk. Selepas langkah ini, anda boleh menggunakan kaedah pencetakan standard seperti biasa.
Pilihan Tambahan
Jika AttachConsole gagal, anda boleh mempertimbangkan alternatif ini:
Atas ialah kandungan terperinci Bagaimana untuk Mencetak ke Tetingkap Perintah daripada Aplikasi Go GUI Disusun dengan `-ldflags -H=windowsgui`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!