Go 实现一次性打包各个平台的可执行程序

第一步:

安装插件

$ go get github.com/mitchellh/gox

第二步:

打包(必须 CD 到Golang 的 Main 文件所在的路径)

这种打包方式有弊端就是都放在了根目录下.而且文件名也改了;

$ gox

分别放在不同的文件夹:

$ gox -output "{{.Dir}}_{{.OS}}_{{.Arch}}/swbatch"

第三步:

根据需求打包出不同平台的可执行程序

只想打 Linux 系统下的可执行程序:

$ gox -os="linux"

只想打 Linux Bit64 系统下的可执行程序:

$ gox -osarch="linux/amd64"

Mac 下打包 Linux 环境下运行的程序

$ env GOOS=linux GOARCH=386 go build main.go

补充:GO 编译 打包 部署

进入到 /data/workspace_go/github.com/freewebsys/go-admin下

执行 bee pack -be GOOS=linux

自动生成 二进制 GOODS linux GOARCH amd64

自动生成 go-admin.tar.gz, 放到服务器 /root/go/pkg下面,解压,

生成 可执行文件 go-admin、static、views和conf几个文件夹,配置conf文件下的app.conf的端口号,然后 ./go-admin即可启动服务, 但SHELL终端关闭,GO服务也随之关闭,那么如何实现后台运行呢?

nohup ./go-admin 即可!!!

nohup ./go-admin 1 > goadmin.out 2 > goerror.err 也可以

package main
import (
 "github.com/astaxie/beego"
 "github.com/astaxie/beego/context"
 "github.com/astaxie/beego/logs"
 "github.com/astaxie/beego/orm"
 _ "github.com/freewebsys/go-admin/routers"
 _ "github.com/go-sql-driver/mysql"
 _ "github.com/mattn/go-sqlite3"
)

func main() {
 //注册sqlite3
 // orm.RegisterDataBase("default", "sqlite3", "go-admin.db")
 orm.RegisterDriver("mysql", orm.DRMySQL) //注册驱动       

//注册默认数据库 (test数据库提前建好)
 orm.RegisterDataBase("default", "mysql", "root:123456@/test?charset=utf8", 30, 30)
 //同步 ORM 对象和数据库
 //这时, 在你重启应用的时候, beego 便会自动帮你创建数据库表。
 orm.Debug = true
 orm.RunSyncdb("default", false, true)
 //增加拦截器。
 var filterAdmin = func(ctx *context.Context) {
 url := ctx.Input.URL()
 logs.Info("##### filter url : %s", url)
 //TODO 如果判断用户未登录。
 }
 beego.InsertFilter("/admin/*", beego.BeforeExec, filterAdmin)
 beego.Run()
}

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

(0)

相关推荐

  • Golang之casbin权限管理的实现

    1. 权限管理 Casbin是用于Golang项目的功能强大且高效的开源访问控制库. 1.1.1. 特征 Casbin的作用: 以经典{subject, object, action}形式或您定义的自定义形式实施策略,同时支持允许和拒绝授权. 处理访问控制模型及其策略的存储. 管理角色用户映射和角色角色映射(RBAC中的角色层次结构). 支持内置的超级用户,例如root或administrator.超级用户可以在没有显式权限的情况下执行任何操作. 多个内置运算符支持规则匹配.例如,keyMatc

  • MongoDB 3.6版本中bind_ip设置详解

    2017年下半年新发布的MongoDB 3.6版本在安全性上做了很大提升,主要归结为两点: 1.将bind_ip 默认值修改为了localhost: 2. 在db.createUser()和 db.updateUser()中添加了authenticationRestrictions 参数,可以用来控制Client端发来的请求源IP以及请求的Server端指定IP. 以下说明和测试主要是针对第一点. 以前的版本默认Mongo服务启动后,使用Server IP 可以直接登入,但是3.6 已将服务启动

  • 解决go 生成的exe不在bin文件夹里的问题

    GO项目目录解释 src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 背景 在src目录下,新建文件test.go,编写代码. 控制台执行go build test.go 之后发现: 生成的test.exe并没有在bin生成,而是在与源码test.go同级目录src下生成. 解决 控制台执行go install 补充:go install之后没有生成bin目录的原因(环境变量GOBIN) 运行go install HelloWorld,没有报错,但工作空间里也没有生成bin目

  • go install/build生成的文件命名和路径操作

    1. 写在前面 本文主要讨论go install/build命令生成的文件命令和生成路径问题.将从两种情况讨论: 文件夹下只有一个"命令源码文件" 文件夹下既有命令源码文件还有其他源码文件 以下实验主要在windows环境下完成呢,所以生成的可执行文件以.exe后缀结尾 2. 文件夹下只有一个"命令源码文件" 假设一个简单的命令源码文件所在的工程组织如下所示: |__ src     |__ jeekTimeProject         |__ test     

  • Go 实现一次性打包各个平台的可执行程序

    第一步: 安装插件 $ go get github.com/mitchellh/gox 第二步: 打包(必须 CD 到Golang 的 Main 文件所在的路径) 这种打包方式有弊端就是都放在了根目录下.而且文件名也改了; $ gox 分别放在不同的文件夹: $ gox -output "{{.Dir}}_{{.OS}}_{{.Arch}}/swbatch" 第三步: 根据需求打包出不同平台的可执行程序 只想打 Linux 系统下的可执行程序: $ gox -os="linu

  • 使用pkg打包Node.js应用的方法步骤

    Node.js应用不需要经过编译过程,可以直接把源代码拷贝到部署机上执行,确实比C++.Java这类编译型应用部署方便.然而,Node.js应用执行需要有运行环境,意味着你需要先在部署机器上安装Node.js.虽说没有麻烦到哪里去,但毕竟多了一个步骤,特别是对于离线环境下的部署机,麻烦程度还要上升一级.假设你用Node.js写一些小的桌面级工具软件,部署到客户机上还要先安装Node.js,有点"大炮打蚊子"的感觉.更严重的是,如果部署机器上游多个Node.js应用,而且这些应用要依赖于

  • 使用pkg打包ThinkJS项目的方法步骤

    在 ThinkJS 的用户群里,经常有开发者提出需要对源码进行加密保护的需求.我们知道 JavaScript 是一门动态语言,不像其他静态语言可以编译成二进制包防止源码泄露.所以就出现了 pkg.nexe 之类的工具,支持将 JS 代码连同 Node 一块打包成一个可执行文件,一来解决了环境依赖的问题,二来解决了大家关心的源码保护的问题. 在pkg 模块的 README 中,罗列了它的几大用处,如果你有下面的几个需求的话建议不妨试试. 为应用提供商业发行版而不用暴露源码 为应用提供 demo 而

  • go打包aar及flutter调用aar流程详解

    目录 一.目的 二.背景 三.流程 问题: 问题一:go如何打包为移动端的包 1.环境配置 2.go配置与打包 问题二:flutter如何调用aar 第一步:存放aar与修改gradle配置 第二步:修改MainActivity.java入口代码 第三步:flutter调用 四.结论 一.目的 本篇文章的目的是记录本人使用flutter加载与调用第三方aar包. 二.背景 本人go后端,业余时间喜欢玩玩flutter.一直有一个想法,go可以编译为第三方平台的可执行程序,而flutter可以是一

  • Python打包文件夹的方法小结(zip,tar,tar.gz等)

    本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip import os, zipfile #打包目录为zip文件(未压缩) def make_zip(source_dir, output_filename): zipf = zipfile.ZipFile(output_filename, 'w') pre_len = len(os.path.dirname(source_dir)) for parent, dirnames, filenames in os.

  • Springboot项目与vue项目整合打包的实现方式

    我的环境 * JDK 1.8  * maven 3.6.0  * node环境 1.为什么需要前后端项目开发时分离,部署时合并? 在一些公司,部署实施人员的技术无法和互联网公司的运维团队相比,由于各种不定的环境也无法做到自动构建,容器化部署等.因此在这种情况下尽量减少部署时的服务软件需求,打出的包数量也尽量少.针对这种情况这里采用的在开发中做到前后端独立开发,打包时在后端springboot打包发布时将前端的构建输出一起打入,最后只需部署springboot的项目即可,无需再安装nginx服务器

  • 关于SpringBoot 打包成的可执行jar不能被其他项目依赖的问题

    Spring Boot 项目打包成的 jar ,被其他项目依赖之后,总是报找不到类的错误? 大伙有这样的疑问,就是因为还没搞清楚可执行 jar 和普通 jar 到底有什么区别? 一.Springboot 项目的默认插件配置 Spring Boot 中默认打包成的 jar 叫做 可执行 jar,这种 jar 不同于普通的 jar,普通的 jar 不可以通过 java -jar xxx.jar 命令执行, 普通的 jar 主要是被其他应用依赖,Spring Boot 打成的 jar 可以执行,但是不

  • 利用Python实现批量打包程序的工具

    目录 程序调用cmd命令 os.system() os.popen() subprocess.run() 程序实现 GUI界面设计 逻辑设计 打包函数 最近看了一些大佬发的关于可视化打包工具auto-py-to-exe文章,auto-py-to-exe是基于pyinstaller,但相比于pyinstaller,它多了 GUI 界面.我自己也试了一下,感觉确实好用且方便,动动手指就能对程序进行打包. 但我发现auto-py-to-exe与pyinstaller都无法直接一次性打包多个程序,想打包

  • uniapp开发打包多端应用完整方法指南

    一.uni-app项目介绍 用uni-app开发多端项目,一套代码可同时打包出各端小程序.h5和app,uni-app支持通过 HBuilderX可视化界面 和 vue-cli命令行 两种方式创建项目,下面示例项目采用 HBuilderX可视化界面 的方式创建,cli项目可参考uni文档,大部分流程都是通用的. 项目结构: ├── components 公用组件 ├── libs 公共方法 ├── pages 页面 ├── static 本地静态资源,注意:静态资源只能存放于此 ├── stor

  • 关于python中第三方库交叉编译的问题

    目录 一.前言: 二.交叉编译介绍: 三.python及其第三方库的交叉编译背景 四.交叉编译的准备工作 五.交叉编译python及其第三方的思路 六.准备交叉编译工具 七.准备openssl-build 八.准备openssl-target 九.准备zlib-build 十.准备zlib-target 十一.准备ctypes-build 十二.准备ctypes-target 十三.编译python-build 十四:编译python-targer 十五.通过crossenv交叉编译第三方库例如

随机推荐