自學了python兩年,flask,資料庫,爬蟲,簡單的程序(配合vue)應該都能寫點,雖然協程,比較高級的面向對象用法可能不是特別6,但是遇到了也能搜著看出來。

想再學一門靜態語言(C++太難了。。)以免以後可能會碰到性能不足的問題。看過一遍官方的文檔,感覺也就是看過的感覺,想寫點東西第一時間又想拿python的第三方庫。。總覺著阻礙了我的學習


不知道怎麼回事,大家總是在忽略一個事情

官方站點是最好的學習資料

以 Go 為例

https://tour.golang.org?

tour.golang.org

官方的 Tutorial 覆蓋全,配套 Playground 代碼可以實時運行

還要啥自行車啊?

至於周邊庫什麼的

avelino/awesome-go?

github.com圖標

awesome-xxx 系列暴力出奇蹟啊


這邊回答以後不更新了,最近開個了Golang的專欄,地址如下:

Golang之旅?

zhuanlan.zhihu.com圖標

接下來的計劃會陸續放在下面這篇介紹裡面:

波羅學:為什麼要開通Golang專欄?

zhuanlan.zhihu.com圖標

感覺我們有幾分相似,最近我也在學go,之前差不多也是兩年python經驗。區別在於我之前不止用過python,再往前還有php、c/c++。

學習go,我大致整理了幾個階段,分別是:快速瞭解、項目練習、系統學習和分享開源。

快速瞭解

由於之前自學過很多門語言,入門的套路很瞭解。該階段不要選擇看書,原因:

  • 看書學習的速度太慢,書中包含太多無用的細節會消磨你的激情,主線不明確;
  • 書本知識很多比較過時,互聯網時代知識迭代比較塊,golang更是半年一個版本;
  • 編程學習注重實戰,書本通常不便於實踐練習,一大坨代碼看起來比較空洞;

我的選擇是先從網上找個兼顧基礎與實戰的課程,然後迅速看完。此時不應該太糾結與語言細節,要多依賴於搜索引擎。之所以能這麼做,是因為你我當前都是有編程經驗的人。並不建議初學者採用這種方式。

考慮或許有初學者在看,說下我剛開始入門編程時看到一些教程。比如有韓順平的PHP教程、李炎恢的JS、Jquery、bootstrap、html5等課程,馬哥Linux運維全集(舊版網上有免費的),當然也可以找找其他類似的課程。這些課程都是畢業後兩年內看的,我採用以課程為主和書籍為輔的學習方式。這些課程的缺點就是太囉嗦,不適合有編程經驗的朋友。最近看到韓老師在bilibili又推出了go的課程全集,初學者可以瞭解下。這些只是我的個人經歷,應該對那些想學習但又不知如何入門的新手應該有一定幫助,畢竟還有很多像我這樣學歷水平一般、又不算聰明的朋友。

看完一個課程差不多花了我一個多星期。結束後,我又回看了部分內容。之後又翻譯了幾篇go的英文blog,主要就是為了不斷鞏固。幾篇博文列在下面:

波羅學:[翻譯]Go的Defer、Panic和Recover?

zhuanlan.zhihu.com圖標波羅學:[翻譯]GO並發模型一:Pipeline和Cancellation?

zhuanlan.zhihu.com圖標波羅學:[翻譯]GO並發模型二:基於Context編程?

zhuanlan.zhihu.com圖標

項目練習

學完的知識要立馬用起來,纔不會很快忘記。我們都是有編程經驗的人,所以可以找到很多可以實戰的項目。在學python的時候,有爬蟲、web,可以想想怎麼用go來做。常說golang好,那麼實現其他語言的一些項目效果如何,難度有多大?

我選擇爬蟲來練習,抓取十幾個網站的數據,比如一些股票日線行情、簡書文章、豆瓣電影等。依照scrapy架構,用go實現一個簡版的爬蟲框架。通過這些,可以鞏固一下go中的場中編碼方式,瞭解golang中數據處理的常用函數,如字元串處理在golang怎麼用、不同的數據類型怎麼做轉換等。

以爬蟲作為練習有很多好處,爬蟲可簡單也可複雜。簡單到一個爬蟲只需 request + parser就可以搞定;複雜也可以,一個爬蟲系統涉及知識廣泛,比如需要熟悉golang中的http client使用、數據處理、正則表達式、html解析,還有破解各種反爬策略。一個好的爬蟲系統還會涉及分散式、高並發,這些正是golang擅長的方向。

-------------------------------------補充--------------------------------------

最近在github上看到一個項目,總結了很多適用於不同語言實踐練習的項目列表。比如計算PI、斐波拉契數列、排序演算法、ftp等,很多人會把自己的實現提交在上面。地址如下:

karan/Projects?

github.com圖標

-------------------------------------結束--------------------------------------

系統學習

接下來的目標就是系統學習。

經過上面一些項目後,對golang就有了大致瞭解,參與一般的項目應該可以了。而且也基本清楚自己缺乏哪些知識。此時不能停止項目實踐,但另一方面也不能僅僅止於此。當然一般也不可能沒有項目,畢竟公司不是招人來學習的。

開始系統學習之前,我寫了一篇文章,如下:

波羅學:GO筆記之為什麼要學GO?

zhuanlan.zhihu.com圖標

為什麼要寫這篇文章,因為希望自己能對golang有個整體的瞭解,這樣纔好制定接下來的學習計劃。寫完這篇文章有如下幾個收穫:

  • 使用了google 趨勢分析工具,以後可以利用這個工具分析下其他項目,比如分析下python的表現如何;
  • 收集了許多優秀資料,比如眾所周知的官網,各大golang社區。還簡要介紹了官網組成,以求能更好的利用其中的資源;
  • 最有價值的是文章最後介紹的:一個簡要介紹golang資源的目錄、一張綜合性的圖譜和一個涉及golang的各種庫、工具和項目awesome合集;

再來大致說說下面接下來的一些想法。首先是整理學習目錄,這個過程會依賴於網上的一些教程和書籍,包括國內與國外的各種資料。它們都已經梳理好了大綱。但我不會依賴具體某一個大綱。基本思路是找到五份以上大綱,然後根據自己的情況進行整理、添加、合併和刪除,最終梳理出一份屬於自己的計劃。這是我當前正在做的事情。不過這個綱要暫時不準備分享出來,因為不太清楚它是否會經常改變。接下來我會依照這些大綱主題定期寫一系列學習筆記。

最近在知乎上看到有個 自省幾十連問 的問答,感覺也可以用來對照自身,查漏補缺。

補充,如果很想知道是否可以一直堅持下去,可以來關注一下我。哈哈!

分享開源

這個過程我暫時想的還不夠細緻,flag立在太早有點慌。由於一些細節還未想清楚,就不多說了。

最近同時在進行幾個事情,其中之一是go的系統學習,另一個是python和演算法學習。等我想清楚了再來補充。

當前還在第三階段,估計短則半年,長則一年。

-----------------------------------分隔線--------------------------------------

持續更新進度

GO筆記之搭建開發環境系列,計劃幾篇文章,分別是:詳細聊聊如何安裝GO,GO提供的那些命令何用、用於GO開發的有哪些IDE。

(已完成) GO筆記之詳細聊聊如何安裝GO

波羅學:GO筆記之詳細聊聊如何安裝GO?

zhuanlan.zhihu.com圖標

Go的安裝筆記已經完成,在寫這篇文章時有幾點收穫,概括如下:

  • 總結出一套開源軟體的安裝思路,通常有系統方式、二進位包和源碼編譯三種方式可選。
  • 瞭解到GO的環境變數隨著版本的升級也在變化,比如GOROOT在新版本可以不用設置了。

(完成) GO筆記之詳解GO的編譯執行流程

本來這篇計劃寫GO命令介紹,但遇到了一些瓶頸,當然不是知識層面問題,主要是在一篇文章中介紹完所有命令比較難,這必然會導致介紹的太過籠統。

最終選個場景,以go源碼編譯執行角度接入,介紹了入門階段需要掌握的兩個命令:go run 和 go build。文章地址如下:

波羅學:GO筆記之詳解GO的編譯執行流程?

zhuanlan.zhihu.com圖標

寫完這篇主要的收穫是理清了GO的編譯流程,和C/C++類似,編譯鏈接成可執行文件。文章還介紹如何通過go命令來檢查這個過程。

接下來想把GO的命令工具集概要介紹下,其他命令待以後有了具體的場景再詳細介紹。

-----------------------------------分隔線---------------------------------------

視具體情況,計劃隨時會變,但一定是在不斷前進。


在已經掌握一門語言之後,學習新語言需要區分學習項目和工作項目

工作時,應該用你最擅長的語言,這樣可以保障以最快最好的狀態完成好工作。

學習時,立好一個目標,然後堅持貫徹使用需要學習的技術去解決問題,不要從太難的入手,這樣會讓你失去信心,也不要選太簡單的目標,太無聊。

Go語言語法簡單,在掌握Python的開發者看來,並不比Python難多少。

最好的學習教程在官方,但是對於實戰型開發者來說,更喜歡從實際操作入手。

分享一個我自己寫的學習手冊,很適合你目前的狀況,有一個小目標,然後一步一步實操學習:

DawnGrp/DawnCode?

github.com圖標

我2015年底因為工作需要開始學習Go,可以看一下我的學習筆記:

Go語言學習之路 - 李文周的博客?

www.liwenzhou.com


golang的話可以試試寫以下的東西:

  1. Web cache
  2. Distributed file system
  3. Blockchain
  4. Anonymity network


我個人感覺,首先,官方文檔的go指南,照著敲一遍,然後根據自己之前的語言經驗,先整理一個知識架構圖,先把基礎掌握。go的基礎基本上分為 基礎知識,比如注釋,關鍵字啊,常量啊,變數等等,然後是數據結構,go語言有 數組array,有切片slice有 map。。 然後看看go是如何支持面向對象的,struct結構怎麼定義,interface怎麼實現,還有函數方法區別。。

當然go語言的函數式編程要清楚。異常怎麼回事,反射怎麼實現。最重要的是go 的亮點並發 gorountine和channel 以及常用的併發模式。

然後是包管理啊,常用類啊,標準庫啊怎麼用之類的。

基礎差不多以後推薦看go語言實戰 這本書,然後根據網上博客,弄清楚數據結構 數組,切片, map底層結構怎麼回事,,弄清楚並發的線程和調度器 是怎麼回事,多核怎麼回事。

然後自己根據業務去學你需要用到的方向的知識,比如web 微服務 人工智慧 爬蟲等等

純手打。。。。。。


直接寫就行了


推薦閱讀:
相關文章