1小時(shí)入門Go語言 - 關(guān)于python和go聯(lián)姻的嘗試

為什么你要學(xué)Go語言

  • C語言比,復(fù)雜性低了很多。作者中有C語言的發(fā)明者。
  • 與Python比,Go保持了接近C語言的性能, 它原生支持高并發(fā)
  • 使用廣泛,2020年3月TIOBE編程語言排行榜,Go已經(jīng)沖進(jìn)了前十了。著名的docker就是用Go寫的

我為什么要學(xué)Go?

作為一個(gè)軟件架構(gòu)師,我不允許自己知識(shí)上有盲點(diǎn)。

環(huán)境準(zhǔn)備

安裝Go編譯器

  1. 上官網(wǎng) https://golang.google.cn/dl/ 在Featured downloads里根據(jù)你的操作系統(tǒng)下載最新版本。
  2. 雙擊打開,下一步下一步完成安裝即可。

安裝IDE

不管什么編程語言,我只用我的最愛支持幾乎所有語言的 VSCode(https://code.visualstudio.com/) ,沒安裝,點(diǎn)擊下載安裝。

寫個(gè)HelloWorld

打開VSCode,新建個(gè)文件:

package main
import "fmt"

func main() {
    fmt.Printf("hello, Go\n")
}

保存為hello.go 。這時(shí)候智能的VSCode會(huì)提示你安裝Go的插件,點(diǎn)擊install安裝即可。

編譯運(yùn)行

直接運(yùn)行

不需要編譯就可以直接運(yùn)行的,調(diào)試非常方便。 在cmd里,進(jìn)入到hello.go所在的目錄

root@testmode:~# go run hello.go 
hello, Go

編譯成exe,再運(yùn)行

這種適合你要發(fā)布你的代碼的場(chǎng)景。 同樣,在cmd里,進(jìn)入到hello.go所在的目錄。

root@testnode:~# go build hello.go
root@testnode:~# ls
hello  hello.go
root@testnode:~# ./hello 
hello, Go
root@testnode:~# 

編譯為so,對(duì)外發(fā)布

不需要編譯就可以直接運(yùn)行的,在cmd里,進(jìn)入到hello.go所在的目錄

root@testnode:~# go build -buildmode=c-shared -o hello.so hello.go

root@testnode:~# ls
hello  hello.go  hello.so
root@testnode:~# 

看,是不是多了個(gè)hello.so。這種編譯到so的編譯模式需要依賴gcc,windows下安裝比較麻煩,所以,我是在Ubuntu下玩的。有人可能想,為什么要編譯為so呢,因?yàn)槭俏襭ython愛好者。我學(xué)Go,就是想通過Go來解決Python性能不足的問題。對(duì)于python項(xiàng)目中對(duì)性能要求特別高的模塊,可以用go語言編寫,再使用python的ctypes調(diào)用(第二天嘗試沒成功)。Oh,Shit。 No Perfect!

問題

第二天更新,今天一直在嘗試使用python的ctypes來調(diào)用go 編譯出來的動(dòng)態(tài)鏈接庫,但是很遺憾失敗了。 我轉(zhuǎn)眼又想,這個(gè)是必須的嗎? 在微服務(wù)的時(shí)代里,我們還必須這樣嗎?
答案是"確實(shí)不必要"。因?yàn)樵趃o里寫一個(gè)http接口也是如此的簡(jiǎn)單。
來個(gè)實(shí)例吧。

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)
}

因此,我不再糾結(jié)ctypes了,不要古代的強(qiáng)綁定。換個(gè)思路,選擇微服務(wù),像不像現(xiàn)代婚姻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容