Go语言开发环境配置教程及使用

简介:
传说go语言的最佳开发环境是苹果的XCODE,我测试的结果确实如此。需要用CGO编译带C代码的go程序的朋友,建议首选苹果的XCODE环境。Windows环境下配置CGO编译非常麻烦,因为Go的文档例子大多以UNIX为例子,所以有些C代码在windows下无法编译,需要修改代码。

我用到的go语言版本是最新的发布版本go 1。 点此下载go1.1.2最新版

国人翻译的go官方安装文档的链接:

http://code.google.com/p/golang-china/wiki/Install 。这个官方安装文档感觉有些过时了,仅供参考。

还有一个《学习Go语言》中文版可以参考:地址:http://www.mikespook.com/learning-go/comment-page-1/#comment-4000

下面是我在winxp下配置go语言开发环境的一些记录:

Windows环境下配置go(必需)
1、 下载go的zip文件。并且一定要把文件解压到c:\go目录下。

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

(ps:原作者显然是认为我们是高手了,所以这么简略,但是我真心是菜鸟,没看到原作者的意思,卡在这里了,好在找到另一篇文章:http://devbbs.doit.com.cn/thread-29077-1-1.html,不过它是基于linux但是很有参考意义)

它的设置是:

http://devbbs.doit.com.cn/thread-29077-1-1.html

安装Go之前需要安装mercurial,这是Go的版本控制工具,可以直接通过ubuntu的安装程序搜索添加。
然后为当前用户定义下面几个bash变量。在ubuntu下敲入cd $HOME,一般是/home/username,然后敲vim .bashrc,修改.bashrc
在这个文件中添加如下(我的cpu是intel,所以是GOARCH是386,具体可参考golang.org说明:
GOROOT="$HOME/Go"
export GOROOT
GOOS=linux
export GOOS
GOARCH=386
export GOARCH
GOBIN="$HOME/bin"
export GOBIN
在帮助里写GOBIN是可选的,但我试了,必须有。
在.bashrc最后还要加上这一行,保证能正确编译安装。
PATH=$PATHGOBIN

也就是说,我现在的情况是: GOROOT = c:\go、GOOS=windows、GOARCH=386)

举例:我的机器:

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。下载地址:http://code.google.com/p/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 get github.com/astaxie/beedb

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

Go 会自动下载该远程包并编译和安装这些包。
配置goclipse(可选)
(如果不喜欢eclipse开发工具,请跳过这个配置。)

1、 下载并安装goclipse插件。Goclipse是go语言for eclipse的插件,下载地址:http://code.google.com/p/goclipse/

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

package main import " 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语言的教程(http://tour.golang.org/#2),很不错。支持在web上直接运行大部分的go程序,想了解这个教程的源代码的朋友可以通过以下方式获取。如果没兴趣,可以跳过这个步骤。

1、 下载安装Mercurial软件。

2、 在命令行下输入:

hg clone http://qinhui99@code.google.com/r/qinhui99-go-tour/

http://qinhui99@code.google.com/r/qinhui99-go-tour/ 这个URL是我从google的go-tour源代码的一个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了。
目录
相关文章
|
11月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
727 4
|
11月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
480 2
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
696 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
524 0
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
560 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
1568 0
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
603 1
|
Go 调度 开发者
探索Go语言中的并发模式:goroutine与channel
在本文中,我们将深入探讨Go语言中的核心并发特性——goroutine和channel。不同于传统的并发模型,Go语言的并发机制以其简洁性和高效性著称。本文将通过实际代码示例,展示如何利用goroutine实现轻量级的并发执行,以及如何通过channel安全地在goroutine之间传递数据。摘要部分将概述这些概念,并提示读者本文将提供哪些具体的技术洞见。

热门文章

最新文章