栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Go编译指令

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go编译指令

许久之前,我曾写过一篇go条件编译的文章,如今又出现了第三种方式,顺便介绍下Go的编译指令。

Go编译指令必须放在文件开头,和代码或普通注释之间要有空行。基本格式是:

//go:指令 [值]

... ...

另一种是用于函数的编译指令,必须紧挨函数声明,不能有空行,格式如下:

//go:指令
func min(a, b int) int
go:build

//go:build功能和// +build一样。只不过在go 1.17这个版本才实现对//go:build的支持。

在gosrcgobuildconstraintexpr.go中有一段注释:

// This package parses both the original “// +build” syntax and the “//go:build” syntax that will be added in Go 1.17.
// The parser is being included in Go 1.16 to allow tools that need to process Go 1.17 source code
// to still be built against the Go 1.16 release.
// See https://golang.org/design/draft-gobuild for details about the “//go:build” syntax.

为了兼容旧版本,//go:build xxx后必须同时有// +build xxx,否则编译器就会报错。

//go:build comment without // +build comment

示例:

//go:build windows
// +build windows

package test

func init() {
    println("I'm here.")
}

在Windows环境运行,会看到"I’m here."输出,切换到Linux环境,该文件不会参与编译,也就不会有输出。

Go编译指令
编译指令说明target
go:build同+build文件
go:norace禁止竞争检查函数
go:nosplit禁止栈分裂。Go会在函数调用时插入栈分裂代码来动态调整栈大小,防止栈溢出。一个确定栈不会溢出的函数可以加上这个编译指令。函数
go:noinline禁止函数内联。函数
go:noescape禁止逃逸分析。只有声明的Go函数(汇编实现)

以上是我们可能可以用到的部分编译指令。对于Go编译指令,日常写代码基本用到的不多。它们目的指导编译,也就是写给编译器看的。对于1.17以上的Go版本,go:build可能用到的多一点。至于提升性能,场景就更少了,一般更应该先想想代码写的是否有问题。

更多编译指令可以参考:

Command compile - The Go Programming Language

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907222.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号