golang生成动态链接库
使用下面命令来编译:
windows
# go build -buildmode=c-shared -o libhello.dll .\libhello.go
linux / mac
# go build -buildmode=c-shared -o libhello.so ./libhello.go
使用下面命令来编译:
windows
# go build -buildmode=c-shared -o libhello.dll .\libhello.go
linux / mac
# go build -buildmode=c-shared -o libhello.so ./libhello.go
在使用NSB进行转发Ajax请求时,当出现跨域问题,可以在NSB的响应header中添加:
Access-Control-Allow-Origin: http://blog.ixcv.com
来实现接口的跨域请求。
设置为*则可以允许任意来源进行Ajax请求(当然,生产环境中没有这么玩儿的):
Access-Control-Allow-Origin: *
今天帮人做了一个类似字符串分析的小程序,为了方便,就用Go语言来开发的,不过我的环境是Linux,对方的使用环境是WindowsXP32bit,就关系到了交叉编译的问题。
在Linux下,交叉编译可以这样来做:
$ cd /usr/local/go/src $ sudo CGO_ENABLED=0 GOOS=windows GOARCH=386 ./make.bash
回车并等待执行结束后,即可对代码进行交叉编译了:
$ CGO_ENABLED=0 GOOS=windows GOARCH=386 go build your_source.go
即可得到目标平台下对应的可执行文件 your_source.exe
在命令行中,使用go build加上文件名,即可在當前目錄下得到一個可執行的文件。默認這個文件的擴展名是GO_ARCH環境變量所指定系統的可執行文件擴展名。
例如,在windows系統下:
go build main.go
可在當前目錄獲得到main.exe可執行文件。
與go build相比,go install不但可以生成對應系統的可執行文件,還可以將對應的文件放置到事先約定的目錄中。
Go-Redis是Go语言的Redis驱动包。
下载地址:https://github.com/alphazero/Go-Redis
安装:
# unzip Go-Redis-go1.zip # mv Go-Redis-go1 $GOPATH/src/pkg/redis # cd $GOPATH/src/pkg/redis # go install
i intGo语言中原生引入了协程,可以通过channel实现协程间通信。
示例代码如下:
package main import ( "fmt" ) func myFunc(c chan int, i int) { fmt.Printf("from myFunc %dn", i) c <- 1 defer close(c) } func wait(c chan int) { hasMore := true for hasMore { if _, hasMore = <-c; hasMore { } } } func main() { c := make(chan int) for i := 0; i < 100; i ++ { go myFunc(c, i) } wait(c) }
Go语言中引入了一种C/C++中没有的符号“:=”,用于明确表达同时进行变量声明及初始化的工作。
尽管Go语言是不折不扣的强类型语言,但是通过使用该符号,可以使得Go语言可以通过表达式自动推导出右值的类型,并声明左值的变量。
val := 10 // 编译器根据右值自动推导出val的类型为int
当然,符号左值的变量不应该是已经被声明过的变量,否则会导致编译错误“no new variables on left side of :=”。
var i int i := 2 // 此时编译器会报错“no new variables on left side of :=”
使用fmt包的Scanf方法可以获取用户的控制台输入:
import "fmt" func main() { var str string fmt.Printf("请输入内容:") fmt.Scanf("%s", &str) fmt.Printf("输入了:%s", str) }
在Github上找到的Go语言读取.ini配置文件的包,实用派。
https://github.com/polaris1119/goconfig
基本用法:
// 加载配置文件 c, _ := config.ReadDefault("config.cfg") // 字符串值 c.String("service-1", "url") // 整型值 c.Int("service-1", "maxclients") // 布尔值 c.Bool("service-1", "delegation")