使用Go编译为可执行文件的方法实现

 更新时间:2025年04月28日 09:48:25   作者:dkgee  
本文主要介绍了使用Go编译为可执行文件的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

案例场景:创建一个两层目录,并在该目录下创建一个文件,将“Hello World”字符写入该文件,并读取出来。

目标:(1)测试案例是否能执行成功;(2)编译代码成windows与linux两种环境下的可执行文件。

测试代码文件名为main.go,内容如下:

package main

import (
	"fmt"
	"io/ioutil"
	"os"
)

func main() {
	// 文件夹名
	_dir := "data/test"
	exist, err := pathExists(_dir)
	if err != nil {
		fmt.Printf("get dir error![%v]\n", err)
		return
	}

	if exist {
		fmt.Printf("has dir![%v]\n", _dir)
	} else {
		fmt.Printf("no dir![%v]\n", _dir)
		// 创建文件夹
		//err := os.Mkdir(_dir, os.ModePerm)
		err := os.MkdirAll(_dir, 0666)
		if err != nil {
			fmt.Printf("mkdir failed![%v]\n", err)
		} else {
			fmt.Printf("mkdir success!\n")
			fileName := _dir + "/test.txt"
			// 创建文件
			os.Create(fileName)
			// 打开文件
			file, _ := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666)
			// 当执行完,关闭文件
			defer file.Close()
			// 写内容到文件中
			file.WriteString("Hello World!")
			//读取文件
			data, _ := ioutil.ReadFile(fileName)
			// 打印内容
			fmt.Println(string(data))
		}
	}
}

func pathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

经过调试,上述代码可正常执行。测试通过。

编译成windows环境exe可执行文件过程,打开文件所在目录,在资源路径框中输入cmd,打开cmd命令框,通过“go env”查看当期环境变量,以windows10环境为例,默认为windows环境。

// 配置环境变量
SET CGO_ENABLED=1
SET GOOS=windows
SET GOARCH=amd64
// 编译命令
go build main.go

编译出来后就是一个可执行文件main.exe,可用鼠标双击直接执行,传到其他电脑上操作,依然可执行,不依赖第三方包(不像Java会依赖JDK)。

执行后,在main.exe所在目录下,生成一个data/test/test.txt,并且打开test.txt文件可看到Hello World。

编译成Linux环境可执行文件,此处除编译环境参数外,其他步骤与上面类似,编译参数如下

// 配置参数
SET CGO_ENABLED=0 
SET GOOS=linux 
SET GOARCH=amd64 
// 编译命令
go build main.go

编译输出的可执行文件名为main,上传至centos7.x系统,使用 “chmod +x main”添加可执行权限,执行 " ./main  ",输出结果与上述windows结果一样。

备注:上述编译环境所在的操作系统均为Windows10,即在windows10上开发代码,编译输出windows与linux两种环境的可执行文件。

到此这篇关于使用Go编译为可执行文件的方法实现的文章就介绍到这了,更多相关Go编译为可执行文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言多人聊天室项目实战

    Go语言多人聊天室项目实战

    这篇文章主要为大家详细介绍了Go语言多人聊天室项目实战,实现单撩或多撩等多种功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Golang实现基于角色的访问控制(RBAC)的项目实践

    Golang实现基于角色的访问控制(RBAC)的项目实践

    基于角色的访问控制(RBAC)是一种安全机制,通过角色来管理用户权限,本文介绍了一种可落地、易扩展的Golang RBAC实现方案,具有一定的参考价值,感兴趣的可以了解一下
    2025-12-12
  • Go结构体的基本使用详解

    Go结构体的基本使用详解

    本文主要介绍了Go结构体的基本使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • go defer延迟调用的使用场景示例详解

    go defer延迟调用的使用场景示例详解

    这篇文章主要为大家介绍了go defer延迟调用的使用场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Go errors默认加堆栈信息的作用分析

    Go errors默认加堆栈信息的作用分析

    这篇文章主要为大家介绍了Go errors默认加堆栈信息作用分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • golang生成RSA公钥和密钥的实现方法

    golang生成RSA公钥和密钥的实现方法

    本文主要介绍了golang生成RSA公钥和密钥的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Go语言自带测试库testing使用教程

    Go语言自带测试库testing使用教程

    这篇文章主要为大家介绍了Go语言自带测试库testing使用教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Go语言处理超大字符串型整数加减经典面试详解

    Go语言处理超大字符串型整数加减经典面试详解

    这篇文章主要为大家介绍了Go语言处理超大字符串型整数加减经典面试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 深入探究Go语言中for range语句

    深入探究Go语言中for range语句

    为了更加便捷地遍历这些数据类型,Go语言引入了for...range语句,本文将以数组遍历为起点,逐步介绍for...range语句在不同数据类型中的应用,希望对大家有所帮助
    2023-06-06
  • goland服务热重启的配置文件

    goland服务热重启的配置文件

    这篇文章主要介绍了goland服务热重启的配置文件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12

最新评论