我是靠谱客的博主 自觉星星,最近开发中收集的这篇文章主要介绍go 自用编译程序代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

// study project main.go
package main

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
)

type buildObj struct {
	gopath  string //GOPATH
	appdir  string //微服务main函数所在目录
	goArch  string //编译目标架构
	appName string //生成的app名称
}

func main() {
	buildInfo := []string{
		`E:work-spacecaozw`,
		"caozw",
		"386",
		"caozw32.exe",
	}
	buildInfo2 := []string{
		`E:work-spacecaozw`,
		"caozw",
		"amd64",
		"caozw64.exe",
	}
	buildList := []interface{}{buildInfo, buildInfo2}
	for _, oneBuild := range buildList {
		buildOneApp(oneBuild.([]string))
	}
}

func buildOneApp(buildInfo []string) {
	buildObj := new(buildObj)
	buildObj.gopath = buildInfo[0]
	buildObj.appdir = buildInfo[1]
	buildObj.goArch = buildInfo[2] //"386" ,"amd64"
	buildObj.appName = buildInfo[3]
	///切换到要编译的目标代码
	os.Chdir(filepath.Join(buildObj.gopath, "src", buildObj.appdir))
	pwd, _ := os.Getwd()
	fmt.Println(pwd)

	os.Setenv("GOPATH", buildObj.gopath)
	os.Setenv("GOARCH", buildObj.goArch)
	fmt.Println(os.Getenv("GOPATH"))
	fmt.Println(os.Getenv("GOARCH"))
	cmd := exec.Command("go", "build", "-o", buildObj.appName, "-i", "-ldflags", "-H windowsgui")
	err := cmd.Run()
	if nil != err {
		fmt.Println("编译app报错,app名称 错误信息:", buildObj.appName, err)
	} else {
		fmt.Println("编译app完成,app名称:", buildObj.appName)
	}
}



Go是一门编译型语言,所以在不同平台上,需要编译生成不同格式的二进制包。

由于Go 1.5对跨平台编译有了一些改进,包括统一了编译器、链接器等。
编译时候只需要指定两个参数:GOOSGOARCH即可。

示例:

# 编译到 linux 64bit
$ GOOS=linux GOARCH=amd64 go build
# 或者可以使用 -o 选项指定生成二进制文件名字
$ GOOS=linux GOARCH=amd64 go build -o app.linux

# 编译到 linux 32bit
$ GOOS=linux GOARCH=386 go build

# 编译到 windows 64bit
$ GOOS=windows GOARCH=amd64 go build

# 编译到 windows 32bit
$ GOOS=windows GOARCH=386 go build

# 编译到 Mac OS X 64bit
$ GOOS=darwin GOARCH=amd64 go build



最后

以上就是自觉星星为你收集整理的go 自用编译程序代码的全部内容,希望文章能够帮你解决go 自用编译程序代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部