golang 使用编译选项-H=windowsgui后,仍然输出log到console

Posted sherlock-merlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 使用编译选项-H=windowsgui后,仍然输出log到console相关的知识,希望对你有一定的参考价值。

大概原理:

调用syscall创建一个console,获取其handle,重定向标准输出stdout到该console。

if debug 
	modkernel32 := syscall.NewLazyDLL("kernel32.dll")
	procAllocConsole := modkernel32.NewProc("AllocConsole")
	r0, _, err0 := syscall.Syscall(procAllocConsole.Addr(), 0, 0, 0, 0)
	if r0 == 0 
		fmt.Printf("Could not allocate console: %s. Check build flags..", err0)
		os.Exit(1)
	
	hout, err1 := syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE)
	if err1 != nil 
		os.Exit(2)
	
	os.Stdout = os.NewFile(uintptr(hout), "/dev/stdout")

  

参考链接: stackoverflow.com

以上是关于golang 使用编译选项-H=windowsgui后,仍然输出log到console的主要内容,如果未能解决你的问题,请参考以下文章

golang编译so动态库加载失败

linux环境中golang使用glibc吗?

golang语言编译的二进制可执行文件为什么比 C 语言大(转载)

golang项目中使用条件编译

golang 类型转换不能按(我)预期的那样工作

golang编译dll给C#调用