1小时入门Go语言 - 关于python和go联姻的尝试
2020-04-22 本文已影响0人
乐享书
为什么你要学Go语言
- C语言比,复杂性低了很多。作者中有C语言的发明者。
- 与Python比,Go保持了接近C语言的性能, 它原生支持高并发
- 使用广泛,2020年3月TIOBE编程语言排行榜,Go已经冲进了前十了。著名的docker就是用Go写的
我为什么要学Go?
作为一个软件架构师,我不允许自己知识上有盲点。
环境准备
安装Go编译器
- 上官网 https://golang.google.cn/dl/ 在Featured downloads里根据你的操作系统下载最新版本。
- 双击打开,下一步下一步完成安装即可。
安装IDE
不管什么编程语言,我只用我的最爱支持几乎所有语言的 VSCode(https://code.visualstudio.com/) ,没安装,点击我下载安装。
写个HelloWorld
打开VSCode,新建个文件:
package main
import "fmt"
func main() {
fmt.Printf("hello, Go\n")
}
保存为hello.go 。这时候智能的VSCode会提示你安装Go的插件,点击install安装即可。
编译运行
直接运行
不需要编译就可以直接运行的,调试非常方便。 在cmd里,进入到hello.go所在的目录
root@testmode:~# go run hello.go
hello, Go
编译成exe,再运行
这种适合你要发布你的代码的场景。 同样,在cmd里,进入到hello.go所在的目录。
root@testnode:~# go build hello.go
root@testnode:~# ls
hello hello.go
root@testnode:~# ./hello
hello, Go
root@testnode:~#
编译为so,对外发布
不需要编译就可以直接运行的,在cmd里,进入到hello.go所在的目录
root@testnode:~# go build -buildmode=c-shared -o hello.so hello.go
root@testnode:~# ls
hello hello.go hello.so
root@testnode:~#
看,是不是多了个hello.so。这种编译到so的编译模式需要依赖gcc,windows下安装比较麻烦,所以,我是在Ubuntu下玩的。有人可能想,为什么要编译为so呢,因为是我python爱好者。我学Go,就是想通过Go来解决Python性能不足的问题。对于python项目中对性能要求特别高的模块,可以用go语言编写,再使用python的ctypes调用(第二天尝试没成功)。Oh,Shit。 No Perfect!
问题
第二天更新,今天一直在尝试使用python的ctypes来调用go 编译出来的动态链接库,但是很遗憾失败了。 我转眼又想,这个是必须的吗? 在微服务的时代里,我们还必须这样吗?
答案是"确实不必要"。因为在go里写一个http接口也是如此的简单。
来个实例吧。
package main
import (
"fmt"
"net/http"
)
func index(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "Hello, world.\n")
}
func main() {
http.HandleFunc("/", index)
http.ListenAndServe("127.0.0.1:5000", nil)
}
因此,我不再纠结ctypes了,不要古代的强绑定。换个思路,选择微服务,像不像现代婚姻。