Rumah >pembangunan bahagian belakang >Golang >Mengapa Aplikasi My Go Tidak Boleh Mencetak ke Konsol Apabila Disusun dengan `-ldflags -H=windowsgui`?

Mengapa Aplikasi My Go Tidak Boleh Mencetak ke Konsol Apabila Disusun dengan `-ldflags -H=windowsgui`?

Linda Hamilton
Linda Hamiltonasal
2024-12-03 05:32:10564semak imbas

Why Can't My Go Application Print to the Console When Compiled with `-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!

Kenyataan:
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