mac端 go语言环境配置问题

修改完环境变量,要执行一个命令应用一下

source .bash_profile

Golang 绑定mac和ip地址,限制服务器

实际业务:go 二进制文件在私有化部署中,需要对客户的服务器mac和ip进行绑定,系统只能运行在绑定的服务器上。把mac和ip地址配置到config中。

运行效果:系统可正常编译,正常访问,在用户Auth接口进行核对。

//检验Mac和内网IP,测试环境不做校验

func (c *CommonBase)CheckMacAndIp()error {

ipCfg :=g.Cfg().GetString("machine.Ipaddr")

macCfg :=g.Cfg().GetString("machine.Macip")

if ipCfg =="127.0.0.1" {

return nil

}

macArray,_ :=gipv4.GetMacArray()

if len(macArray) ==0 {

return gerror.New("mac地址获取失败")

}

if garray.NewStrArrayFrom(macArray).Contains(macCfg) ==false {

return gerror.New("示授权的应用MAC,请联系")

}

ipArray,_ :=gipv4.GetIpArray()

ipIntranetArray,_ :=gipv4.GetIntranetIpArray()

if len(ipArray) ==0 len(ipIntranetArray) ==0 {

return gerror.New("ip地址获取失败")

}

if garray.NewStrArrayFrom(ipArray).Merge(ipIntranetArray).Contains(ipCfg) ==false {

return gerror.New("示授权的应用IP,请联系")

}

return nil

}

项目使用GoFrame框架1.6。考虑到客户可能会对内存数据做分析破解,可以把mac和ip地址做AES加密。

如何配置go语言开发环境

1、下载go的zip文件。并且一定要把文件解压到c:\go目录下。

2、配置windows的高级环境变量。包括:GOROOT、GOOS、GOBIN、GOARCH。并且在path变量里面把c:\go\bin加入。以便可以在命令行直接运行go命令。

举例:我的机器:

GOPATH= c:\go;c:\go\src;F:\workspace\goSample01;

GOBIN=c:\go\bin;F:\workspace\goSample01\bin;

其中,c:\go是go的安装路径;

F:\workspace\goSample01是我写的go语言项目的工程目录;

F:\workspace\goSample01\bin是go语言项目的工程目录下的可执行文件路径;

3、在完成环境变量配置后,打开一个命令行窗口,直接输入go,然后回车,看看是否出现go的帮助信息。如果出现,那么go的基本环境就OK了。

注意:这个基本环境不包含开发工具,也不能直接编译带C代码的go程序。

4、

(可选)为了支持Import远程包,最好装个gomingw。下载地址:

/downloads/list。如果下的是压缩包,请把它解压到C盘。例如,C:\gowin-env。里面有个Console.bat是以后使用go

get的环境。举例:有个文件a.go,里面import(

"fmt"

"github.com/astaxie/beedb"

_ "github.com/ziutek/mymysql/godrv"

为了编译该a.go文件,需要启动Console.bat,然后在该命令行窗口,进入c:\go\src目录下,执行go getgithub.com/astaxie/beedb

Go get github.com/ziutek/mymysql/godrv .

Go会自动下载该远程包并编译和安装这些包。

配置goclipse(可选)

(如果不喜欢eclipse开发工具,请跳过这个配置。)

1、下载并安装goclipse插件。Goclipse是go语言for eclipse的插件,下载地址:

2、启动eclipse并创建go项目。然后写个最简单的helloworld.go文件,并运行。代码如下:

packagemainimport"fmt"func main(){ fmt.Printf("hello, world")}

配置gocode(可选)

如果不需要go语法辅助和eclipse里面的(按ALT+/)弹出go语言自动辅助功能,请跳过这个配置。

1、下载gocode的zip文件,解压后放在go的bin目录下。

2、下载并安装Git软件。并且在path里面配置git的执行路径。例如c:\git\bin

3、在命令行执行:go build .\gocode。如果一切正常,那么将会编译生成一个gocode.exe文件在go的bin目录下。如果编译失败,那么就转第4步。

4、如果第3步直接编译gocode源文件成功,那就直接到第5步。否则,就需要通过git下载gocode源文件,然后再编译。在命令行执行:go get -u github.com/nsf/gocode 。就会生成gocode.exe文件。

5、在goclipse插件里面指定gocode的路径。就可以在elcipse里面调用gocode来帮助写编码了。

从开发工具这块看,go语言还不够成熟,开发工具都还不完善,有待改进。

下载go-tour教程源代码(可选)

Google有个在线运行go语言的教程(),很不错。支持在web上直接运行大部分的go程序,想了解这个教程的源代码的朋友可以通过以下方式获取。如果没兴趣,可以跳过这个步骤。

1、下载安装Mercurial软件。

2、在命令行下输入:

hg clone

作为测试用的。如果把http改成https协议,下载就会失败。搞不懂。

编译带调用C代码的go文件(可选)

1、为了在windows下编译带C代码的go程序,你首先需要下载并安装MinGW或者Cygwin。

2、首选安装MinGW。在安装MinGW之后,记得要把MinGW安装目录\bin路径设置在path环境变量里面,以便能在dos窗口下直接调用gcc。

3、下载一个gowin-env。下载地址:gowin-env。下载后解压到某个目录下,例如:C:\gowin-env. 然后,编辑go-env.bat。配置相关的go参数。例如,我的配置是:

set GOARCH=386

set GOOS=windows

set GOROOT=c:\go

set GOBIN=%GOROOT%\bin

set GOPATH=%GOROOT%;F:\workspace\goSample01;

设置好go-env.bat后,就可以点击Console.bat来启动编译和运行窗口。

4、编写一个带C代码的go程序。例如,testc.go

5、编译

例如:

go build -compiler gccgo test_c.go

运行调用C代码的go文件(可选)

1、testc.go.

创建rand目录,然后在rand里面创建testc.go. 代码如下:

package rand

/*

//

#include stdio.h

*/

import "C"

func PrintHello() {

C.puts(C.CString("Hello, world\n"))

}

2、a.go

在rand下创建a.go.代码如下:

package rand

import "fmt"

func SayHello(name string){

fmt.Println(name)

}

3、test_import.go

在rand的上一级创建test_import.go。代码如下:

package main

import "./rand"

func main(){

rand.SayHello("tom")

rand.PrintHello()

}

4、运行test_import.go

go run test_import.go

在测试其它几个C代码的时候,发现windows版本的cgo还有些编译问题,同样的代码转移到苹果的XCODE下就没有问题。后来终于发现原因了,原来有些例子是unix平台下的,而在windows平台下,方法名和参数需要做调整。

例如:下面代码在windows下编译报一堆错误。

package rand

/*

#include stdlib.h

*/

import "C"

func Random() int {

return int(C.random())

}

func Seed(i int) {

C.srandom(C.uint(i))

}

这里需要把return int(C.random()) 修改为“return int(C.rand())”

C.srandom(C.uint(i))修改为“C.srand(C.uint(i))”编译就OK了。

如何在Mac源码安装Go1.5开发环境

Go1.5开发环境依赖Go1.4版本作为引导,因为Go1.5使用Go本身来编译安装Go,所以必须保证服务器上已经安装Go1.4,这完全是为了解决先有鸡还是先有蛋的问题,当然如果你想避免编译安装1.4也可以直接使用二进制包。

在这里假设你希望将go1.5安装到$HOME/go1.5目录下,只需要以下几步:

下载Go1.5的源码放到$HOME/go1.5目录下

在安装Go1.5之前需要将Go1.4放到$HOME/go1.4下面或者export GOROOT_BOOTSTRAP=/go1.4安装目录/

到$HOME/go1.5/src/下执行all.bash即可

我习惯将软件安装至/usr/local/下,以下为我安装Go1.5(/usr/local/go1.5)的步骤:

wget

tar zxvf go1.5.1.src.tar.gz

mv ./go /usr/local/go1.5

wget

tar zxvf go1.4.3.src.tar.gz

mv ./go /usr/local/go-bootstrap1.4/

cd /usr/local/go-bootstrap1.4/src

./all.bash //编译安装Go1.4,有可能test不通过,只要编译通过,test可忽略,目的是需要go1.4的二进制包来编译1.5

cd /usr/local/go1.5/src

GOROOT_BOOTSTRAP=/usr/local/go-bootstrap1.4 ./all.bash

//可在环境变量中添加GOROOT_BOOTSTRAP,然后再编译Go1.5

以下为网摘:

From C to Go

The gc tool chain is being converted from C to Go.

An ongoing process, started early 2014.

Russ Cox says "It'll be done by March [2015]."

New link tool to replace 6l, 8l, etc.

New asm tool to replace 6a, 8a, etc.

Machine-translated gc to replace 6g, 8g, etc.

Design doc:

golang.org/s/go13compiler

Go 1.5 will have no C code in the tool chain or runtime.

Go语言将使用Go代替C重写运行时环境

Go 1.4 的合并窗口在 9 月份将关闭,从现在开始到12月份发布 Go 1.4 之前将只接受 bug 修复和小调整。

Go 1.4 最主要的变化是将使用 Go 语言本身来重写 Go 的运行时,而之前是采用 C 语言开发。这也是为什么 Go 的发行版中包含一个 C

编译器的原因。

使用 Go 重写的好处是:

当前如果在 Goroutine 的调用堆栈中发现 C 代码,runtime 将在需要增长堆栈时回滚到老的堆栈方法。如果使用 Go 来重写

runtime,那么堆栈拷贝的方法就会更加高效

目前转换工作只计划转 Go 编译器 (5g, 6g, 8g), 而不是 C 编译器,降低运行时中的 C 代码行数,甚至可能完全清除

注意

这是 golang.org 分发版,也就是 gc ,而不是 gccgo

这是不同的 C 编译器,gc 工具链将使用你系统的 C 编译器来编译,gc 运行时则使用它的 C 编译器来编译

8月20日后增加的转换行可能跟 this request 有关.

Go语言将使用Go代替C重写运行时环境

— 从现在开始到12月份 Go 1.4版本发布前,Go将只接受Bug修复和小范围的调整,Go

1.4版本将实现使用Go语言来重写Go的运行时环境。