前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跨平台 go 编译控制

跨平台 go 编译控制

原创
作者头像
IT工作者
发布2022-07-22 09:45:41
3520
发布2022-07-22 09:45:41
举报
文章被收录于专栏:程序技术知识

在Windows下开发, 有时候会用到一些系统库, 因此会用到syscall, 比如最近项目中需要设置Windows控制台窗口标题, 在开发时也考虑到了跨平台的情况, 还特意在代码中加了

代码语言:javascript
复制
    if runtime.GOOS != "windows" {
        
    }

但时到Linux下编译不过, 因为syscall的接口分不同平台, 有点仅支持Windows.

自然而然想到了go的编译控制:

在文件头加入如下标签:

//+build windows

然后编译的时候添加tag参数

代码语言:javascript
复制
go build -tags="windows"

比如我这里就会存在两个文件 func_windows.go:

//+build windows

代码语言:javascript
复制
package global

import (
    "syscall"
    "unsafe"
)

// 设置cmd窗口标题
func SetCmdTitle(title string) {
    kernel32, _ := syscall.LoadLibrary(`kernel32.dll`)

    sct, _ := syscall.GetProcAddress(kernel32, `SetConsoleTitleW`)

    strUtf16,_ := syscall.UTF16PtrFromString(title)

    syscall.Syscall(sct, 1, uintptr(unsafe.Pointer(strUtf16)), 0, 0)

    syscall.FreeLibrary(kernel32)

}

和 func_linux.go:

//+build linux

代码语言:javascript
复制


package global

func SetCmdTitle(title string) {

}

这样在不同的平台加各自的标签进行build就可以了, 不会报错.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档