go语言开发web教程 go语言开发gui( 三 )


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了 。
81.go + vue实现web应用程序 前端框架越来越丰富go语言开发web教程,前后端分离已经是大多数软件团队采取的模式了 。vue使用的场景也越来越多 。
go本来使用template模板来进行前端的表现,现在可以用vue来分担很大一部分工作了 。
通常直接使用go语言写后端,然后使用静态模板加载渲染前端 , 前端获取后端提供的数据是使用{{ }}符号,2个套在一起的花括号 。这个也是vue使用的数据表现方式 。
如果go+vue来协同工作的话 , 需要对vue进行一点设置 。比如把{{ }}的方式改为[[ ]]的方式 。
首先我们要知道,vue的使用,需要在页面中加载vue.js或vue.min.js
纯静态网页使用vue是这样的(给个html例子)
然后我们实现一个go的简单web服务和模板页面
这个go服务器通过端口 1989 展示服务器页面,提供了一个静态文件路径 htmlpage,我们把vue.js和index.html文件都放置在htmlpage路径里 。
go服务器还用模板给前台页面提供了一个News结构的数据,数据包括go语言开发web教程:Title,Content,Author的值 。
在index.html页面中,加载vue.js的时候需要带上静态路径 htmlpage
在 new 一个 vue 变量的时候 , 必须有一句来设置包裹数据的符号,我们这里设置这个符号为[[ ]]
同时,所有需要由 vue 渲染的数据,都写成类似这样的样子
在 go + vue 方式下的完整模板文件 index.html
此页面中{{ }}包裹的数据是由go从后端提供的数据( 例如:{{.Title}}) , 而[[ ]]包裹的数据,是vue渲染的数据 。
只是把 Vue里的数据 , 改为由go后端提供即可 。
好吧,作者已经在向月亮示爱了 。呵呵 _
运行一下程序 , 看修改模板后的效果 。

推荐阅读