20130103Windows下编译GO程序

   今天试着编译了一下beego库,顺便学习了一下go的安装环境。

   下解压包安装在d:目录下go目录,设置了

   GOROOT=D:\go

   GOARCH=386

   GOBIN=%GOROOT%\bin

   在D:\go下创建目录project,然后创建工程HelloGO.

   HelloGO下目录结构为:

   HelloGO

           ----src

                ------HelloGO.go(是对beego的测试)

          -----pkg(可选)

           ----bin(说这个是可选项的,但是我不创建的时候生成会失败)

          -----make.bat(用来编译src下文件)


由于HelloGO.go是对beego的测试,内容如下:

// HelloGo
package main

import (
    "github.com/astaxie/beego"
)

type MainController struct {
    beego.Controller
}

func (this *MainController) Get() {
    this.Ctx.WriteString("hello world,这是一个WEB程序")
}

func main() {
    beego.RegisterController("/", &MainController{})
    //beego.HttpPort = 8080 // default
    beego.Run()
}

go build的时候会提示少
github.com/astaxie/beego
包,然后就需要使用go get -v  
github.com/astaxie/beego
先下载包,如果使用默认的GOPATH,会包包吓到go目录下的src,和安装到pkg中,这个肯定会污染了系统。

在网上收了发现使用make.bat来设置GOPATH,设置后就生成到自己的src,和pkg下面了。

但是 bin目录怎么设置也还是不行,要么生成在go.exe目录,下面生成在HelloGO.go目录。

不会生成到./bin目录,最后只有手动创建/bin目录,用go build -o %GOBIN%/HelloGO.exe HelloGo.go指定

整个make.bat内容如下:

@echo off

setlocal

if exist make.bat goto ok
echo make.bat must be run from its folder
goto end

: ok

set OLDGOPATH=%GOPATH%
set GOPATH=%~dp0
set GOBIN=%GOPATH%\bin

gofmt -tabs=false -tabwidth=4 -w src
go get -v github.com/astaxie/session
go get -v github.com/russross/blackfriday
go get -v github.com/astaxie/beego
go build ./src/beego
go install beego
rmdir /S /Q %GOBIN%
mkdir %GOBIN%
go build -o %GOBIN%/HelloGo.exe ./src/HelloGo.go

:end
echo finishe
pause

这种方法不知道对不对,但至少编译没问题了,程序也能够正常运行。

创建一个Web程序几行代码就搞定了,不用再向以前学Asp、Asp.net一样去部署环境。

是激起我学习Go语言的一大原因之一。

好了。

使用 MinGW-w64 工具链在 Windows编译 Linux 程序,需要使用 CGO 编译器。CGO 是 Go 语言的 C 语言调用接口,它可以让 Go 语言调用 C 语言的函数和库。通过 CGO 编译器,我们可以在 Windows 上编写 Go 代码,然后使用 MinGW-w64 工具链编译 C 语言代码,最后将 Go 代码和 C 代码链接起来生成 Linux 可执行文件。 具体操作步骤如下: 1. 下载并安装 MinGW-w64 工具链,下载地址:https://sourceforge.net/projects/mingw-w64/ 2. 配置 MinGW-w64 工具链的环境变量,将 MinGW-w64 的 bin 目录添加到系统 PATH 环境变量。 3. 在 Go 代码使用 CGO,例如: ``` package main /* #include <stdio.h> void sayHello() { printf("Hello, World!\n"); } */ import "C" func main() { C.sayHello() } ``` 这个例子演示了如何在 Go 代码调用 C 语言的函数。在 Go 代码,我们需要使用 `import "C"` 导入 C 语言的库和函数。 4. 编译 C 语言代码,生成静态库文件,例如: ``` x86_64-w64-mingw32-gcc -c -o mylib.o mylib.c x86_64-w64-mingw32-ar rcs mylib.a mylib.o ``` 这个命令会生成静态库文件 `mylib.a`,它包含了 C 语言代码的编译结果。 5. 编译 Go 代码,使用 CGO 编译器链接 C 语言的静态库文件,例如: ``` CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-w64-mingw32-gcc go build -o myprogram main.go ``` 这个命令会生成 Linux 平台的可执行文件 `myprogram`,它包含了 Go 代码和 C 语言代码的链接结果。 6. 将生成的 Linux 可执行文件从 Windows 复制到 Linux 环境运行,例如: ``` scp myprogram user@server:/path/to/myprogram ssh user@server "/path/to/myprogram" ``` 其,`user` 是 Linux 系统的用户名,`server` 是 Linux 系统的 IP 地址或域名,`/path/to/myprogram` 是 Linux 系统的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值