Rumah >pembangunan bahagian belakang >Golang >Mengapa Aplikasi My Go Tidak Boleh Mencetak ke Konsol Apabila Disusun dengan `-ldflags -H=windowsgui`?
Mencetak Output dengan -H=windowsgui Flag
Apabila menyusun aplikasi Go dengan bendera -ldflags -H=windowsgui, ia mungkin tidak boleh mencetak output ke tetingkap arahan. Ini kerana boleh laku dicipta sebagai proses GUI yang tidak dikaitkan dengan mana-mana konsol, walaupun apabila dipanggil daripada konsol.
Untuk mencetak output dalam senario ini, seseorang mesti melampirkan proses itu secara eksplisit pada konsol. Ini boleh dicapai menggunakan pakej syscall:
package main import ( "fmt" "syscall" ) const ( ATTACH_PARENT_PROCESS = ^uint32(0) ) 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("Attached") } }
Dengan menggunakan AttachConsole(ATTACH_PARENT_PROCESS), proses Go dilampirkan pada konsol yang dikaitkan dengan proses induknya. Ia kemudiannya boleh mencetak output ke konsol.
Jika AttachConsole gagal, anda mungkin perlu membuat tetingkap konsol secara manual menggunakan AllocConsole atau memaparkan dialog GUI dengan maklumat yang dikehendaki menggunakan perpustakaan GUI yang sesuai.
Atas ialah kandungan terperinci Mengapa Aplikasi My Go Tidak Boleh Mencetak ke Konsol Apabila Disusun dengan `-ldflags -H=windowsgui`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!