go語言面試題「語言go編程基礎」

在雲計算時代,Go 是首選的編程語言,很多雲的基礎設施都是由 Go 來寫的,更別說還有 Docker 和 kubernetes 這樣的大殺器。對於後端工程師來說,這是最值得學習的技能。

這篇文章適合有一定基礎的人,因為 Go 不適合編程初學者,對於編程的初學者還是建議從 Python 這種語言開始。

如果有一定的編程基礎,再來學習 go 就會輕鬆不少,特別是有 C 語言基礎,學習 Go 語言就會快很多。

Go 的語法很少,關鍵詞也很簡潔,但是對於長期寫 Java 這種面向對象語言的人來說,需要拋棄 Java 中對於面向對象的固有想法,Go 在面向對象編程上給出了不一樣的方案,沒有類的概念,介面與 Java 中的也完全不一樣。對於熟悉了 Java 的人來說,需要適應一段時間。

這篇文章不會涉及 Go 的具體教程,可以認為這是一份路徑圖,是我認為快速上手 Go 語言比較好的方式。

在看下面的內容之前,我會默認你已經掌握了一門開發語言,並且做過一些 Web 開發,熟悉 Git 的基本用法。

1. 入門

1.1 基礎入門

環境配置

寫代碼之前,需要先安裝 Go,Go 支持 Linux、macOS、Windows 等平台,可以在這裡下載安裝包。

macOS 和 Windows 都提供了二進位安裝包,Linux 則需要使用源碼安裝(在 Ubuntu,centos 這些發行版上也可以通過命令直接安裝,但一般無法安裝最新版本的 Go)。

在寫代碼之前,需要了解一下 Go 中的兩個重要概念:GOROOT、GOPATH。GOROOT 比較好理解,就是 Go 的安裝目錄,可以理解為 Java 中的 JAVA_HOME。

GOPATH 通常會是 ~/go 目錄,在這個目錄底下,通常有三個子目錄:bin、pkg、src。bin 目錄放的是可執行命令,pkg 目錄下是編譯時生成的一些中間件文件,src 則是存放源碼的地方。

在 Go Modules(下面會說到)出現之前,Go 的依賴庫和源碼都需要放在 GOPATH 的 src,否則會出現找不到依賴的情況。Go Modules 出現之後,Go 的依賴管理問題基本解決了大半,就不用把源碼放在 GOPATH 中,GOPATH 基本只用來存放依賴。

基礎語法

Go 的官網提供了一個入門的教程 A Tour of Go,這裡面基本覆蓋到了 Go 的全部語法。可以直接在網頁上訪問,也可以把這個應用下載到本地:

go get golang.org/x/tour
複製代碼

然後就可以在命令行輸入(需要配置 GOPATH ):

tour
複製代碼

這樣就可以打開一個本地的網頁,載入的速度就會快很多,畢竟 Go 的官網在境外,直接訪問的還是有點慢。

類似的教程還有一個 Go By Example,這兩個教程可以選擇一個學習。

在把上面的練習做完了之後,就可以開始看 《Go 程序設計語言》,這本書可以說是 Go 最好的入門教材,雖然在內容上有一定的滯後,但整體上依然非常值得看。

常用命令工具

Go 命令(go cli command)非常重要,Go 整個開發的生命周期都需要使用這些工具。

Go 命令的基本用法如下:

go <command> [arguments]
複製代碼

在 初學階段,下面幾個命令必須掌握:

  • go run:編譯並運行 Go 程序
  • go build:編譯並打包 Go 程序
  • go get:安裝依賴
  • go test:運行測試

在你開始使用 Go 開發程序之後,會頻繁的用到上面的命令。如果要查看完整的命令,在命令行輸入:

go help
複製代碼

這些內容都看完之後,對於 go 基本語法和常用工具應該是比較熟練了,為了能夠儘快使用上手 Go 的開發,接下來應該要學習一些常用的組件和框架。

1.2 常用框架

如果要開發一個應用,基本都會涉及到 Web API 的開發,會使用 MySQL 和 Redis。下面就介紹一下 Go 語言中如何快速上手這些框架。

Web 框架

Go 中常用的 web 框架 有很多,我推薦 gin,這個框架簡單易學,而且性能也很不錯。

go get -u github.com/gin-gonic/gin
複製代碼

可以快速創建一個基於 http 的 API 服務:

package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
複製代碼

MySQL 框架

在 Go 語言中,database/sql 包中定義了資料庫操作的所有介面,但沒有提供具體的實現。因為資料庫的種類很多,這種只定義介面的屏蔽了資料庫庫的具體實現,便於我們更換和升級。

所以在連接資料庫的時候,需要自行選擇資料庫驅動,推薦那些完全實現了 database/sql 的驅動,這樣利於代碼的後續維護和升級。

在這裡以 MySQL 資料庫為例,常用的驅動是 go-sql-driver/mysql,這個驅動完全實現了 database/sql 介面。

安裝很方便:

$ go get -u github.com/go-sql-driver/mysql
複製代碼

然後就可以使用 database/sql 的介面來操作資料庫:

import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)


db, err := sql.Open("mysql", "user:password@/dbname")
if err != nil {
	panic(err)
}
複製代碼

用原生的 MySQL 介面來寫代碼會產生很多的冗餘代碼,如果想讓代碼更加整潔一點,ORM 框架就是必須的了,那就需要學習一下 gorm 框架。

go get -u gorm.io/gorm
複製代碼

Redis 框架

在 Go 中使用 Redis 就需要使用 go-redis/redis 組件了。安裝同樣很簡單:

go get github.com/go-redis/redis/v8
複製代碼

除了這個組件之外,另一個 redigo 使用的人也挺多的,可以自行探索一下。

學完這些,就可以使用 Go 來日常的開發了。

2. 進階

在學完上面的基礎之後,就需要學習一些進階的內容。

Go Modules

在學習上面的框架時,可能你還是在 GOPATH 寫代碼。從 Go1.11 之後,Go 推出了 Go Modules 作為官方的依賴管理工具。

這個工具必須要學會,依賴管理一直是 Go 語言的短板,經歷了多個非官方的解決方案之後,官方出手,推出了這個工具。學習的最好資料是 Go Blog 上的文章:
blog.golang.org/using-go-mo…。如果英文的看起來不方便,這裡有我翻譯的版本。

用了 Go Modules 之後,依賴管理會方便很多,也不用在 GOPATH 下開發了。

Go Blog

學習 Go 語言,Go blog 絕對是很重要的資料。官方推出的工具和特性,都會在第一時間有 blog 發布,看這些資料就能明白這些特性和工具的推出背景,就不會理解上的偏差。

比如你在 Go blog 中可以學習到為什麼 Go 的聲明語法是這樣的。

Go 語言特性的更新都會在 Go blog 上說明,所以關注 Go blog 是跟進 Go 特性的好機會。畢竟現在 Go 語言還在不斷的發展,會有很多特性在不斷的更新。

Effective go

除了 Go blog 之外,Go 官方還有 Effective go 這份必看文檔。

這份文檔可以看做是 Go 的避坑指南,其中指出了 Go 語言容易出錯的地方,可以幫助我們寫出更乾淨,結構更優美的代碼,文檔不長,非常值得閱讀。

3. 其他資源

如今學習編程,Github 是無法忽略的一個資源庫。下面的這些 Github 倉庫中有大量的資源可以學習。

  • avelino/awesome-go:Go 的輪子庫也在逐漸完善,Github 上的這個倉庫收集了 Go 的諸多庫,要造輪子之前,記得先到這裡來找一找
  • Alikhll/golang-developer-roadmap:這裡還有一份 Go 開發者的路線圖
  • talkgo/read:這個倉庫有很多的 Go 的教程,是中文版的,但裡面的信息需要甄別一下,有些已經過時了
  • go/wiki:go 項目的wiki,這裡有很多技術文檔,和大牛的博客,如果後續想深入研究 Go,可以從這裡下手

4. 開發工具

GoLand 也是由 JetBrains 出品的工具,這個工具需要付費。如果不想在這上面花錢,可以使用 VsCode,VsCode 上的插件很多,而且安裝方便。

如果自己願意折騰,可以試試 Vim,Vim 配合 vim-go 插件,體驗也還不錯,就是安裝的過程中可能會踩一些坑。

對於開發電腦的選擇,我推薦 Mac,做開發,Mac 還是非常適合的,現在互聯網公司的開發機標配就是 Mac,如果覺得新的 Mac 的價格比較貴,可以選擇二手,或者官網的翻新機。如果不考慮便攜性,可以選擇 Mac mini,性價比賊高。

在最近發布的 Go1.16 版本中,Go 已經開始支持 ARM 的架構,所以即使是 M1 晶元的 Mac,也可以用來做 Go 的開發(但這個要謹慎,可能會有其他的坑)。

5. 小結

當你把上面的內容都過了一遍時,你應該和我現在一樣,算是入門了 Go 語言,Go 是一門非常有潛力的語言,雲計算時代的首選,非常值得學習。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/208321.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 15:00
下一篇 2024-12-08 15:01

相關推薦

發表回復

登錄後才能評論