1小时入门Go语言 - 关于python和go联姻的尝试

2020-04-22  本文已影响0人  乐享书

为什么你要学Go语言

我为什么要学Go?

作为一个软件架构师,我不允许自己知识上有盲点。

环境准备

安装Go编译器

  1. 上官网 https://golang.google.cn/dl/ 在Featured downloads里根据你的操作系统下载最新版本。
  2. 双击打开,下一步下一步完成安装即可。

安装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了,不要古代的强绑定。换个思路,选择微服务,像不像现代婚姻。

上一篇下一篇

猜你喜欢

热点阅读