go build 通过文件名后缀实现不同平台的条件编译操作

go build 可以通过标签或者文件名的后缀来提供条件编译,这里说下通过文件名的后缀来提供条件编译

文件命名约定可以在go build 包里找到详细的说明,简单来说,就是源文件包含后缀:_$GOOS.go,那么这个源文件只会在这个平台下编译,_$GOARCH.go也是如此。

这两个后缀可以结合在一起使用,但是要注意顺序:_$GOOS_$GOARCH.go,不能反过来用:_$GOARCH_$GOOS.go

例如下面截图,这些文件定义了对应不同平台下是否需要编译。

补充:Golang: 条件和循环

条件、循环要点

1、for, if后面的条件没有括号

2、if条件里也可以定义变量

3、没有while

4、switch不需要break,也可以直接switch多个条件

1. branch.go:

package main

import (

"io/ioutil"

"fmt"

)

// switch会自动break,除非使用fallthrough;可以swich多条件;panic()报错让程序终止

func grade(score int) string {

g := ""

switch {

case score < 0 || score > 100:

panic(fmt.Sprintf("Wrong score: %d", score))

case score < 60:

g = "F"

case score < 80:

g = "C"

case score < 90:

g = "B"

case score <= 100:

g = "A"

//default:

// panic(fmt.Sprintf("Wrong score: %d", score))

}

return g

}

func readFile(filename string) {

contents, err := ioutil.ReadFile(filename)

if err != nil {

fmt.Println(err)

} else {

fmt.Printf("%s\n", contents)

}

// if的条件里可以赋值,其赋值的变量作用域就在if的block中

if contents, err := ioutil.ReadFile(filename); err != nil {

fmt.Println(err)

} else {

fmt.Printf("%s\n", contents)

}

}

func main() {

const filename = "abc.txt"

readFile(filename)

fmt.Println()

fmt.Println(

grade(0),

grade(56),

grade(82),

grade(100),

//grade(101), // 中断报错

)

}

输出:

abcde

12345

hello

world

abcde

12345

hello

world

F F B A

2. loop.go:

package main

import (

"fmt"

"strconv"

"os"

"bufio"

)

// 十进制转二进制,for中省略初始条件

func convertToBin(n int) string {

result := ""

for ; n>0; n /= 2 {

lsb := n % 2

result = strconv.Itoa(lsb) + result

}

return result

}

// 一行行读文件,for中省略初始条件,相当于while

func printFile(filename string) {

file, err := os.Open(filename)

if err != nil {

panic(err)

}

scanner := bufio.NewScanner(file)

for scanner.Scan() {

fmt.Println(scanner.Text())

}

}

// 死循环,不要while了

func forever() {

for {

fmt.Println("abc")

}

}

func main() {

fmt.Println(

convertToBin(5), // 101

convertToBin(13), // 1101

convertToBin(72387885),

convertToBin(0),

)

printFile("abc.txt")

//forever()

}

输出:

101 1101 100010100001000110100101101

abcde

12345

hello

world

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

以上是 go build 通过文件名后缀实现不同平台的条件编译操作 的全部内容, 来源链接: utcz.com/p/235710.html

回到顶部