golang

搭建Go开发及调试环境(LiteIDE + GoClipse) -- Windows篇

孤人 提交于 2020-03-01 19:19:41
这里以Windows7 64位为例,如果是32位环境需安装对应版本程序。 一、安装golang1.2.2 1.3及1.3.1编译生成的二进制文件,无法使用LiteIDE23.2携带的gdb7.7进行调试。 二、安装及配置LiteIDE 将liteidex23.2.windows.7z解压到D:\即完成安装。 2.1 设置编辑环境 因为是64位环境,所以选择“win64”。 查看->编辑环境变量,确认GOROOT变量与GO安装路径一致。 2.2 添加GOPATH 查看->管理GOPATH...,创建新目录E:\Code_Repository\golang,并添加到“自定义目录”。 2.3 新建项目 选择上一步添加的GOPATH,模板为Go1 Command Project 编辑源代码,添加几行代码,包括变量声明、初始化及赋值,用来验证调试是否生效。 2.4 设置编译选项及编译 编译->编译配置,设置编译参数。在BUILDARGS添加 -gcflags "-N -l" ,目的是去掉编译优化,方便调试。 Ctrl+B构建项目,生成hello.exe 2.5 调试程序 按F5启动调试,程序在main函数处停止 通过F10单步调试,可以看到i、j的变化(好像会稍微延迟那么0.X秒) 三、安装及配置GoClipse GoClipse是Eclipse的一个插件,当前0.8.0版本要求Java

golang学习的点点滴滴:异常处理 defer, panic, recover

梦想与她 提交于 2020-03-01 16:20:59
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下(比如除数为0了)。才使用Go中引入的Exception处理:defer, panic, recover。 这几个异常的使用场景可以这么简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。 例子代码: package main import "fmt" func main(){ defer func(){ // 必须要先声明defer,否则不能捕获到panic异常 fmt.Println("c") if err:=recover();err!=nil{ fmt.Println(err) // 这里的err其实就是panic传入的内容,55 } fmt.Println("d") }() f() } func f(){ fmt.Println("a") panic(55) fmt.Println("b") fmt.Println("f") } 输出结果: a c 55 d

windows 下的 eclipse安装goclipse 配置golang开发环境

女生的网名这么多〃 提交于 2020-03-01 16:18:26
1. 下载goclipse eclipse plugins http://goclipse.googlecode.com/svn/trunk/goclipse-update-site/ (建议使用proxy下载,除非你能直接访问;)) 我在百度网盘上传了最新的goclipse插件包,提供下载: http://pan.baidu.com/s/1mgBR2Co SHA1 HASH:c43f10a00e509848c3016dbaa8162209daf00d4f MD5 HASH:81875edbbb493cbe2c13519273079da2 安装完插件后,重启可以看到eclipse的右上角有个golang logo , 地鼠图标: 2. 下载golang,调试tools 下载Golang Windows 版本当前使用 go1.3.3.windows-386.zip : https://storage.googleapis.com/golang/go1.3.3.windows-386.zip 使用proxy 访问站点取得最新版本 : https://golang.org/dl/ 下载liteidex24.3.windows.7z : https://github.com/visualfc/liteide#website 主要是用到liteide里面的gdb (用于调试GO程序) ,和

liteide 在windows下代码无法自动提示的问题

泄露秘密 提交于 2020-03-01 15:12:48
由于用sublime调试golang实在不爽,所以还是下载了liteide 如题,因为一些原因重装系统后,golang装在D盘 (D:\go),gopath也设置在D盘(D:\gopath) ,无奈打开liteide后,代码无法自动补全,也没有提示。 采取做法是: 在环境变量中依次添加 GOROOT=d:\go GOBIN=d:\go\bin GOARCH=386 GOOS=windows 而不是在liteide配置文件中更改,那个不起作用。golang的二进制包安装后,只有goroot,缺其他3个变量。必须先补齐。 保证环境变量设置正确后,打开git bush, 输入 go get -u github.com/nsf/gocode 回车,重新安装gocode。 然后再打开liteide,这时神奇的自动补全就出现了。 来源: oschina 链接: https://my.oschina.net/u/152503/blog/123887

windows liteide 调试 beego

天大地大妈咪最大 提交于 2020-03-01 15:12:35
在windows下用liteide调试beego,下了断点无反应,这是因为windows版本golang安装的时候编译参数的问题,默认是-o2,修改goroot src目录下的make.bat文件,将-O2删除,添加-ggdb选项,重新执行all.bat删除gopath下已经编译的库 进入liteide 编译断点调试,就可以了,有时候可能不准,对于beego来说,但是多试几次是可以跟踪到断点的 linux也可以这样设置一下 来源: oschina 链接: https://my.oschina.net/u/659405/blog/405599

windows平台下使用LiteIDE交叉编译golang

别说谁变了你拦得住时间么 提交于 2020-03-01 14:33:42
1,在windows环境下使用交叉编译,需要编译工具GCC,必须使用MinGW: http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/mingw-get-inst-20120426/mingw-get-inst-20120426.exe/download 安装完成后运行MinGW Installation Mannger 选择安装mingw32-ggc-g++ 安装完成后设置环境变量,系统环境变量PATH中 靠前的位置 添加C:\MinGW\bin(安装目录) 注: 如果出现类似这样的错误counld not be located in the dynamic link libintl-8.dll,是这个dll冲突了,将所有其他目录libintl-8.dll全部更名,防止冲突,记得编译完之后要改回来不然影响其他程序正常运行,如下: 2,在golang(当前版本go 1.3.3)安装目录下C:\Go\src目录下新建cc.bat文件(名字任取),内容如下: set CGO_ENABLED=0 :::::::::::::::::::::x86::::::::::::::::::::::::::::::::::::::: set GOARCH=386 set GOOS=windows call make

golang 判断ip、内网ip

浪尽此生 提交于 2020-03-01 11:07:37
实现如下 package main import ( "fmt" "net" "strconv" "strings" ) func checkIp(ipStr string) bool { address := net.ParseIP(ipStr) if address == nil { fmt.Println("ip地址格式不正确") return false } else { fmt.Println("正确的ip地址", address.String()) return true } } // ip to int64 func inetAton(ipStr string) int64 { bits := strings.Split(ipStr, ".") b0, _ := strconv.Atoi(bits[0]) b1, _ := strconv.Atoi(bits[1]) b2, _ := strconv.Atoi(bits[2]) b3, _ := strconv.Atoi(bits[3]) var sum int64 sum += int64(b0) << 24 sum += int64(b1) << 16 sum += int64(b2) << 8 sum += int64(b3) return sum } //int64 to IP func inetNtoa

Go语言开发Windows应用

被刻印的时光 ゝ 提交于 2020-03-01 09:59:27
当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场。Go不是脚本语言,但却有着脚本语言的轻便简单的特性。相较于php和python之类以服务器控制台为主要战场的脚本语言来说,Go语言是真正的圆了“动态语言的应用开发梦”。 Windows Api Windows桌面应用依赖于win api,画出各种应用界面和控件本质上就是调用windows提供的api。Go开发Windows App要做的第一件事情就是封装这些windows api。 https://github.com/lxn/go-winapi 这个项目已经实现了对winapi的封装。比如你会在go-winapi/user32.go中找到CreateWindowEx的封装: 这里是使用了syscall包。这里要说明一下,golang的官方文档没有对syscall.Syscall12的说明,需要查看代码,这里的Syscall12代表了createWindowEx传入的参数有12个,已经实现的Syscall方法还有 Syscall, Syscall6, Syscall9, Syscall12, Syscall15。 具体代码参照($goroot/src/pkg/syscall/dll_windows.go, 这里 http://codereview.appspot.com

golang图形编程(lxn/walk)

这一生的挚爱 提交于 2020-03-01 09:32:45
###说明: golang没有提供图形库,促生了一些第三方库,walk就是其中之一,但是walk不是跨平台的,仅能在windows平台下使用。 接下来使用walk编写一个例子。前提是golang、git的环境已经配置好了,如果没有请移步golang基础的学习。 下载walk库:go get github.com/lxn/walk 下载打包工具:go get github.com/akavel/rsrc ####打包工具介绍: * 这里是列表文本将manifest文件转换为syso文件,目的是执行go build时将其打包至一个文件 例如:rsrc -manifest test.manifest -o rsrc.syso * rsrc有很多命令值得研究 例如打包图标 rsrc -manifest test.manifest –ico icon.ico -o rsrc.syso * 如果不希望打包,也可以将test.manifest更名为test.exe.manifest ###提示: 如果程序运行带有命令行界面,请使用这条命令编译go文件 go build -ldflags "-H windowsgui" test.go 来源: oschina 链接: https://my.oschina.net/u/2311811/blog/550137

学习笔记:channel的初步理解

匆匆过客 提交于 2020-02-29 08:07:40
channel会阻塞,阻塞的时候系统会继续顺序调用其他goroutine,main()也是一个goroutine,只是最先被执行。 看一个代码: <!-- lang:shell --> package main import ( "fmt" ) func display(msg string, c chan bool) { fmt.Println(msg) c <- true fmt.Printf("end %s \n", msg) } func main() { c := make(chan bool) go display("hello", c) go display("hello1", c) go display("hello2", c) fmt.Println("start") <-c fmt.Println("end") } 这段代码输出结果: <!-- lang: shell --> start hello end hello hello1 hello2 end 首先执行main函数,它是第一个goroutine,在main中又通过go语句创建了3个goroutine,但是不是立即执行的,它们必须等到main挂起后才会被调用。 当main执行到 <-c 的时候,根据channel特性,此时产生了阻塞,这时候系统会将main的goroutine挂起