美文网首页
1小时入门Go语言 - 关于python和go联姻的尝试

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

作者: 乐享书 | 来源:发表于2020-04-22 17:28 被阅读0次

    为什么你要学Go语言

    • C语言比,复杂性低了很多。作者中有C语言的发明者。
    • 与Python比,Go保持了接近C语言的性能, 它原生支持高并发
    • 使用广泛,2020年3月TIOBE编程语言排行榜,Go已经冲进了前十了。著名的docker就是用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了,不要古代的强绑定。换个思路,选择微服务,像不像现代婚姻。

    相关文章

      网友评论

          本文标题:1小时入门Go语言 - 关于python和go联姻的尝试

          本文链接:https://www.haomeiwen.com/subject/ztkumhtx.html