Go語言 自學(xué)講解與資料

Go語言 自學(xué)講解與資料

簡(jiǎn)單說下自己情況,本人目前已有一年多開發(fā)經(jīng)驗(yàn)(前端+后端nodejs),再次基礎(chǔ)上自學(xué)golang,并成功找到一家用 golang 的公司,下面開始表演真正的技術(shù)時(shí)候。

各位老鐵,如果你想轉(zhuǎn)語言或者學(xué)習(xí)新的語言,我再這里墻裂推薦 Golang 既騷氣又帥氣 Google 親兒子。

?

一. Go 語言簡(jiǎn)介

go語言 全稱:"Go Programming Language" 為了避免與 go 這個(gè)英文單詞沖突 就簡(jiǎn)稱為 golang

?

Go 的來歷

很久以前,有一個(gè)IT公司,這公司有個(gè)傳統(tǒng),允許員工擁有20%自由時(shí)間來開發(fā)實(shí)驗(yàn)性項(xiàng)目。在2007的某一天,公司的幾個(gè)大牛,正在用 c + + 開發(fā)一些比較繁瑣但是核心的工作,主要包括龐大的分布式集群,大牛覺得很鬧心,后來 c + +委員會(huì)來他們公司演講,說 c + + 將要添加大概35種新特性。這幾個(gè)大牛的其中一個(gè)人,名為:Rob Pike,聽后心中一萬個(gè)xxx飄過,“ c + +特性還不夠多嗎?簡(jiǎn)化 c + +應(yīng)該更有成就感吧”。于是乎,Rob Pike和其他幾個(gè)大牛討論了一下,怎么解決這個(gè)問題,過了一會(huì),Rob Pike說要不我們自己搞個(gè)語言吧,名字叫“go”,非常簡(jiǎn)短,容易拼寫。其他幾位大牛就說好啊,然后他們找了塊白板,在上面寫下希望能有哪些功能(詳見文尾)。接下來的時(shí)間里,大牛們開心的討論設(shè)計(jì)這門語言的特性,經(jīng)過漫長(zhǎng)的歲月,他們決定,以c語言為原型,以及借鑒其他語言的一些特性,來解放程序員,解放自己,然后在2009年,go語言誕生。

而這個(gè)IT公司就是現(xiàn)在的 Google

?

Go 創(chuàng)始人黃金三人團(tuán)

Go 語言是由谷歌公司在 2007 年開始開發(fā)的一門語言,目的是能在多核心時(shí)代高效編寫網(wǎng)絡(luò)應(yīng)用程序。Go 語言的創(chuàng)始人 Robert Griesemer、Rob Pike 和 Ken Thompson 都是在計(jì)算機(jī)發(fā)展過程中作出過重要貢獻(xiàn)的人。

  • Rob Pike:Go 語言項(xiàng)目總負(fù)責(zé)人,貝爾實(shí)驗(yàn)室的Unix團(tuán)隊(duì)和Plan9操作系統(tǒng)計(jì)劃成員,與Thompson工同創(chuàng)造了UTF-8字符編碼

  • Robert Griesemer:制作Java的HotSpot編譯器和Chrome瀏覽器的JavaScript引擎V8

  • Ken Thompson: 是C語言和Unix的創(chuàng)造者。(1983年圖靈獎(jiǎng)和1988國(guó)家技術(shù)獎(jiǎng))

image

從左到右分別是羅伯特·格瑞史莫(Robert Griesemer)、羅伯·派( Rob Pike)和肯·湯普遜(Ken Thompson)。

?

Go 的特點(diǎn)

Go是一種編譯型語言,一種并發(fā)的、帶垃圾回收的、快速編譯的語言。它具有以下特點(diǎn):

  • 它可以在一臺(tái)計(jì)算機(jī)上用幾秒鐘的時(shí)間編譯一個(gè)大型的Go程序。

  • Go為軟件構(gòu)造提供了一種模型,它使依賴分析更加容易,且避免了大部分C風(fēng)格include文件與庫的開頭。

  • Go是靜態(tài)類型的語言,它的類型系統(tǒng)沒有層級(jí)。因此用戶不需要在定義類型之間的關(guān)系上花費(fèi)時(shí)間,這樣感覺起來比典型的面向?qū)ο笳Z言更輕量級(jí)。

  • Go完全是垃圾回收型的語言,并為并發(fā)執(zhí)行與通信提供了基本的支持。

Go 的基本結(jié)構(gòu)

Go語言專門針對(duì)多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進(jìn)程。而且并結(jié)合類似 Python 的語法簡(jiǎn)潔。

任何一個(gè)編程語言都有自己的基礎(chǔ)架構(gòu),只有在了解了編程語言的基礎(chǔ)架構(gòu)后才能開始進(jìn)行一些簡(jiǎn)單的編程的邏輯,然后組合簡(jiǎn)單結(jié)構(gòu)變?yōu)閺?fù)雜的數(shù)據(jù)結(jié)構(gòu),其實(shí)編程很多的時(shí)候都是一種藝術(shù),寫出的代碼也是一種藝術(shù),給人賞心悅目的感覺,這需要持續(xù)不斷的努力和精進(jìn)才能達(dá)到。

基本結(jié)構(gòu)有:

  • 命名
  • 常量
  • 變量
  • 賦值
  • 類型
  • 包和文件
  • 作用域

命名:

Go語言的函數(shù)名,變量名,常量名,類型名和包的命名也是都遵循這一規(guī)則的:

一個(gè)一個(gè)名字必須以一個(gè)字母(Unicode字母)或下劃線開頭,后面可以跟任意數(shù)量的字母、數(shù)字或下劃線。

大寫字母和小寫字母是不同的:Car和car是兩個(gè)不同的名字。

Go語言中只有 25 個(gè)關(guān)鍵字;且關(guān)鍵字不能用于自定義名字,只能在特定語法結(jié)構(gòu)中使用.

  break      default        func     interface    select
case       defer          go       map          struct
chan       else           goto     package      switch
const      fallthrough    if       range        type
continue   for            import   return       var

除此之外Go語言中還有30多個(gè)預(yù)定義的名字,比如int和ture等:

內(nèi)建常量: true false iota nil

內(nèi)建類型: int   int8   int16   int32  int64   uint   uint8  uint16   uint32   uint64   uintptr  
         float32   float64   complex128   complex64   bool   byte    rune   string  error

內(nèi)建函數(shù): make  len  cap   new   append   copy   close   delete   complex   real    imag    panic  recover

常量:

在Go語言中,常量是指編譯期間就已知且不可改變的值。常量可以是數(shù)值類型(包括整型、浮點(diǎn)型和復(fù)數(shù)類型)、布爾類型、字符串類型等。 下面我們使用const 關(guān)鍵字來定義常量:

package main

import "fmt"
import "math"

// "const" 關(guān)鍵字用來定義常量
const s string = "appropriate"

func main() {
    fmt.Println(s)

    // "const"關(guān)鍵字可以出現(xiàn)在任何"var"關(guān)鍵字出現(xiàn)的地方
    // 區(qū)別是常量必須有初始值
    const n = 20

    // 常量表達(dá)式可以執(zhí)行任意精度數(shù)學(xué)計(jì)算
    const d = 3e20 / n
    fmt.Println(d)

    // 數(shù)值型常量沒有具體類型,除非指定一個(gè)類型
    // 比如顯式類型轉(zhuǎn)換
    fmt.Println(int64(d))

    // 數(shù)值型常量可以在程序的邏輯上下文中獲取類型
    // 比如變量賦值或者函數(shù)調(diào)用。
    // 例如,對(duì)于math包中的Sin函數(shù),它需要一個(gè)float64類型的變量
    fmt.Println(math.Sin(n))
}

變量:

通常用var聲明語句可以創(chuàng)建一個(gè)特定類型的變量,然后給變量附加一個(gè)名字,并且設(shè)置變量的初始值。

Go的基本類型有:

* bool
* string
* int int8 int16  int32 int64 
* uint uint8 uint16 uint32 uint64 uintptr
* byte // uint8 的別名
* rune // int32 的別名 代表一個(gè)Unicode碼
* float32 float64
* complex64 complex128

變量的聲明的語法一般是:

 var 變量名字 類型 = 表達(dá)式

通常我們?cè)诰幊痰倪^程中,也用簡(jiǎn)短聲明變量。它以“名字 := 表達(dá)式”形式聲明變量,變量的類型根據(jù)表達(dá)式來自動(dòng)推導(dǎo)。

  destination := 12
result := rand.Float64() * 3.0

?

二. Go語言 自學(xué)資料

首先來說下自己的自學(xué)路徑吧:

之前我是搞 Node.js 的,他是用c++ 搞出來的產(chǎn)物,所以你要是想弄透它,你還得熟練個(gè) c++ 。而對(duì)于 Go語言 來說在 1.5 版本開始作者就開始用 Go 本身來寫自己的底層的一些東西比如 gc 。所以對(duì)于學(xué)習(xí)Go語言的小伙伴門,你有什么不明白的函數(shù)方法都可以直接進(jìn)入源碼直接查看,這是我學(xué)習(xí)Go的過程中感覺很爽的一點(diǎn)。

1. 基本語法學(xué)習(xí)

書籍篇:

1.1 個(gè)人推介 《The Go Programming Language》Go語言圣經(jīng)(中文版)。國(guó)人翻譯過來還是不錯(cuò)的,如果你英語沒問題可以直接上 原版。

image

這本書每個(gè)知識(shí)點(diǎn)都講的較為清晰詳細(xì),里面舉例代碼基本是Go自身標(biāo)準(zhǔn)代碼庫里面的源碼。里面的概念性的東西也許你剛開始看理解不透徹,但是當(dāng)我用過一段時(shí)間Golang 后也會(huì)回來再看,這時(shí)看起來理解的東西又不一樣了。

1.2 《Go in Action》Go語言實(shí)戰(zhàn) 這本書網(wǎng)上沒有電子圖書版本,你可以上當(dāng)當(dāng)或者淘寶購買實(shí)體書。

image

這本書也很不錯(cuò),里面不僅闡述了GO 的基礎(chǔ)概念,也加入了實(shí)際可操作的實(shí)例代碼。如果你嫌看書太慢,我推介你微信公眾號(hào)關(guān)注 “飛雪無情” 寫的Go語言實(shí)戰(zhàn)筆記系列文章,或直接網(wǎng)頁打開 飛雪無情的博客

1.3 還有一本 go web 這本書是 謝大 開源在他的 github 上的,star目前2W+,如果想快速上手 web開發(fā)的 推介給各位。

image

以上基本每本書我都有看翻看過所有才推介給大家,對(duì)于go 相關(guān)的書籍還有很多這里就不一一介紹了。

?

視頻篇:

直接上干貨了:

  • 無聞老師的全套 這是基礎(chǔ)視頻 他還有強(qiáng)化的進(jìn)階視頻,這里給出他的個(gè)人 github 無聞go教程地址
  • 某私人組織的公開視頻 講的較為基礎(chǔ),可以了解下,給出他們的教程文檔地址:
    Go 零基礎(chǔ)編程入門教程
  • 還有套視頻 是現(xiàn)在慕課網(wǎng)掛在首頁的 谷歌工程師講解收費(fèi)的 go語言視頻教程,由于是特殊渠道這里就不直接公布了,可以聯(lián)系我分享給你。

其實(shí)我覺得視頻這個(gè)東西屬于被動(dòng)學(xué)習(xí),還是以自己開文檔主動(dòng)學(xué)習(xí)較好,視頻速度偏慢,當(dāng)然我也有看過,就是覺得文檔看夠了有點(diǎn)累,換著看看視頻也不錯(cuò)的。

?

網(wǎng)站資料篇:

除了官網(wǎng)給出的學(xué)習(xí)資料外(其實(shí)官網(wǎng)的資料就已經(jīng)很不錯(cuò)了),我在這里提供一些之外的資料:

Go 技能樹全展示

給出一張 GO中國(guó) 發(fā)出來的技術(shù)圖譜
你也可以直接去這個(gè)頁面查看鏈接 Golang 技術(shù)棧

[圖片上傳失敗...(image-a76033-1525424812881)]

第二講移步這里

?著作權(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)容