為什么字節(jié)跳動選擇使用 Go 語言?
:
Golang是最年輕的編程語言之一,在寫這篇內(nèi)容之前,目前穩(wěn)定的Golang版本是1.19.5。
除此之外,它被認為是一種在開發(fā)者中很受歡迎的編程語言。它可以在許多平臺和環(huán)境中構(gòu)建和運行,有豐富且實用的內(nèi)置包。
我使用Golang是因為它簡潔明了,結(jié)構(gòu)化,而且干凈。
接下來,我會介紹為何選擇Golang。我不打算將Golang與其他編程語言進行比較,因為我認為并沒有什么意義和價值。
所以,我會從語言結(jié)構(gòu)本身開始介紹,讓你領(lǐng)會Golang的與眾不同。
語言結(jié)構(gòu)
package main
import (
?"errors"
?"fmt"
)
type Numbers []int
func (n Numbers) Repeat() error {
?if n == nil {
? ?return errors.New("Numbers is nil")
?}
?for i, e := range n {
? ?fmt.Printf("%02d => %3d\n", i+1, e)
?}
?return nil
}
func main() {
?if err := Numbers(nil).Repeat(); err != nil {
? ?fmt.Println(err)
?}
?_ = Numbers([]int{1, 99, 100}).Repeat()
}
我不會介紹所有的Go語言語法,但上面的代碼是Golang代碼的一個例子。
你現(xiàn)在不需要理解它,但你可以學習代碼的結(jié)構(gòu),從package和import,到func main作為入口點,if-else和for循環(huán)作為控制結(jié)構(gòu)之一,還涉及到types、nil、errors等等。
它是嚴格的類型化的,使用大括號作為范圍,即使你只寫了一行控制結(jié)構(gòu),使用nil而不是null(在這里節(jié)省了1個字符),并且只用分號來分隔語句,而不是結(jié)束它。
綜上所述,Golang的語法很適合初學者,至少我是這么認為的。
你不用擔心寫出質(zhì)量較差的代碼語法,因為Golang不僅有完善的指南來教你如何寫的更好,它也有自己的linter和formatter,來規(guī)范化你的代碼。
內(nèi)置支持
Golang帶來了自己內(nèi)置的工具來幫你構(gòu)建一個優(yōu)秀的應用程序。
Linter? Formatter? Tester? 你說了算。
它也有一個垃圾收集器,原生支持并發(fā),還支持在線運行。除此之外,Golang也有支持性的內(nèi)置包。你可以在沒有任何第三方模塊的情況下編寫一個網(wǎng)絡(luò)應用、命令行界面應用,甚至是一個Web Assembly應用。
但是,如果你想創(chuàng)建一個Golang模塊呢?讓我們來談?wù)勥@個問題。
模塊
你可以在本地和遠程輕松地創(chuàng)建一個 Golang 模塊。
只需執(zhí)行g(shù)o mod init <module-name>,然后像往常一樣編碼即可。
Golang模塊開箱即支持git,你可以直接把你的Golang模塊推送到git倉庫,然后把它導入你的代碼中。
例如,如果你想導入Postgres插件或數(shù)據(jù)庫憑證模塊,你只需輸入git repo的名字就可以導入。
import (
?"context"
?"database/sql"
?"log"
?"time"
?"github.com/ClavinJune/rotator"
?"github.com/lib/pq"
)
構(gòu)建結(jié)果
Golang將你的代碼構(gòu)建成二進制文件。
如果你在Windows上,它將把你的代碼構(gòu)建成可執(zhí)行文件,如果你在Linux上,它將構(gòu)建一個ELF文件,以此類推。
另外,你可以只用一個環(huán)境變量來控制構(gòu)建。
假設(shè)你在一臺Linux機器上,但你想為Windows創(chuàng)建一個可執(zhí)行文件,只要告訴它就可以了。
$ ls
main.go
$ GOOS=windows GOARCH=amd64 go build main.go
$ file main.exe
main.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
$ GOOS=darwin GOARCH=amd64 go build main.go
$ file main
main: Mach-O 64-bit x86_64 executable
你也可以創(chuàng)建一個Web Assembly模塊。
$ GOOS=js GOARCH=wasm go build -o main.wasm main.go
$ file main.wasm
main.wasm: WebAssembly (wasm) binary module version 0x1 (MVP)
在前面的內(nèi)容里,我并沒有面面俱到詳細介紹Go語言的每一處細節(jié),只是主觀的介紹了一些我個人比較欣賞的亮點。
如果,這能夠引起你對Go語言的興趣,可以通過書籍或者教程去深入、系統(tǒng)的學習。
hello,大家好,我是Jackpop,重點大學本科畢業(yè)后保送到哈工大計算數(shù)學專業(yè)讀研,有多年國內(nèi)頭部互聯(lián)網(wǎng)、IT公司工作經(jīng)驗,先后從事過計算機視覺、推薦系統(tǒng)、后端、數(shù)據(jù)等相關(guān)工作。如果同學們在升學考研、職業(yè)規(guī)劃、高考志愿、簡歷優(yōu)化、技術(shù)學習