(文章持續更新中...有志同道合的人能夠一塊兒探討下。整個系列(1~8)準備重寫,不過都是很基礎的入門筆記,想學到很深刻的東西則不建議閱讀...)前端
自學的前端開發,野生程序員,從最初的小白到能夠獨立完成先後端項目,從域名購買解析到服務器部署,都親自實踐過。最近想着找準方向沉澱下本身。定下了主攻前端,業餘研究Golang的小目標,至此開始記錄本身的學習歷程。程序員
題外話:由於屬於自學的,從最初服務器都不知道的懵懂小白到本身搭建LNMP環境,部署發佈代碼,中間的煎熬過程只有本身知道,深感沒人指導,沒人教的痛苦。自學有時候一個知識點你可能要3小時才能想明白,可是別人指導一下可能3分鐘就解決了。因此後來本身帶前端團隊的時候儘量多的幫助小夥伴們成長。當初剛入門的時候,一直到技術總監手把手叫我寫代碼,陪我連續熬了三個通宵以後,我的感受頓悟了,好像不少知識點均可以串聯起來懂了原理了,今後自學的路上障礙愈來愈少了,也多是積累到必定程度了吧,可是真心感謝那個陪我熬通宵的技術總監,沒有他的指導,不可能有個人今天。web
選擇Golang語言的緣由:以前嘗試過PHP作後端,用Laravel獨立完成事後端項目(Laravel給我感受的確很優雅,ORM也很不錯,操做數據庫爲所欲爲)。做爲前端程序員,Node.js是必知必會的,也能用Node.js開發後端程序。可是總感受Node.js是創建在C之上的,主觀以爲隔了一層libuv,多少會影響點性能。由於非科班出身,因此始終對底層的技術保持着敬畏。學C語言感受沒勇氣,學Java?不想禿頂。。。最終主觀臆斷的選擇學習Golang.我的以爲將來物聯網,邊緣計算,分佈式開發是大的趨勢,而Golang號稱是互聯網時代的編程語言,操做底層(docker)到微服務都有相應的解決方案。便可以跟操做系統底層打交道又能夠開發web項目,說不定還能夠來個彎道超車,對我來講是再適合不過了。docker
Golang是谷歌在2007年開源的。可讓你訪問操做系統,還提供了強大的網絡編程和併發編程支持數據庫
具備諸多優點:編程
自帶編譯器將源代碼編譯成二進制格式。二進制文件能夠在不一樣的平臺上運行,解決了跨平臺的問題。後端
建立Go程序->編譯程序->運行編譯獲得的可執行文件,是開發Go程序的必要步驟。bash
Go語言在多核併發上擁有原生的設計優點。從底層原生支持併發,無須第三方庫、就能輕鬆充分利用多核CPU服務器。服務器
Go語言重構的系統能使用更少的硬件資源而有更高的併發和 I/O 吞吐表現網絡
goroutine 能夠理解爲一種虛擬線程。Go 語言運行時會參與調度gotoutine 合理地分配到每一個 CPU中。
goroutine之間使用通道(channel)進行通訊
package main
import (
"fmt"
"math/rand"
"time"
)
func producer(header string, channel chan<- string) {
// 不停地生產數據
for {
// 將隨機數和字符串格式化爲字符串發送給通道
channel <- fmt.Sprintf("%s: %v", header, rand.Int31())
// 等待1秒
time.Sleep(time.Second)
}
}
func customer(channel <-chan string) {
// 不停地獲取數據
for {
// 從通道中取出數據, 此處會阻塞直到信道中返回數據
message := <-channel
fmt.Println(message)
}
}
func main() {
// 建立一個字符串類型的通道
channel := make(chan string)
// 建立producer()函數的併發goroutine
go producer("cat", channel)
go producer("dog", channel)
customer(channel)
}
複製代碼
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir(".")))
http.ListenAndServe(":8888", nil)
}
複製代碼
我的感受Golang在建立http服務器簡潔性方面跟Node.js有得一拼