Go 介紹與常見數據類型

前言

時至今日,如果你想當一名程序員,入門學習編程。你有衆多的開發語言可以選擇,從 Tiobe 編程語言趨勢版可以看到,比較流行的有:Python、C、C++、Java、C#、JavaScript、SQL、Swift...

做選擇從來不是容易的事情,所以你可能會問,我該學哪一門語言?

在我們問自己該學哪一門語言之前,不如再往前追問一句:爲啥會有這麼多語言?

其實,每一門語言被設計出來都是有原因的,都是爲了解決不同的問題,取決與你想做什麼(移動開發、後端開發、前端開發、桌面應用、遊戲開發...)。

甚至在爲了方便自己更好的工作,你可能會學習一門或多門語言。

都 2021 年了,如果你還在糾結學哪門語言開始入門,那麼,我會推薦 Go 語言。

爲什麼選 Go 語言

話說在 2007 年的一個雲淡風輕的下午,谷歌的三位工程師(Robert Griesemer、Rob Pike 和 Ken Thompson)由於對其內部的各種系統(主要使用 C++ 語言構建)和工具感到沮喪,產生了從頭開始重新設計一門新的編程語言的想法。這三位大佬覺得這門語言應該是用來解決其他語言的弊端,同時保留其有用且優秀的功能。

程序那些事兒:

Go 來自於一個相當令人印象深刻的團隊。肯-湯普森(Unix 和 C 語言的設計者和創造者),羅伯-派克(UTF-8 和 Unix 格式的共同創造者),以及羅伯特-格里瑟默(谷歌工程師)。如果想看看 Go 的前世今生,可以看看 " Go at Google:軟件工程服務中的語言設計 ",這篇文章討論了 Go 最初是如何爲解決 Google 的問題而構思的。

所以 Go 被設計出來:

  • 使用靜態類型,擁有 C 語言的運行時效率

  • 具備 Python 和 JavaScript 等語言的可讀性和實用性

  • 在網絡和多處理方面表現出卓越的性能

  • 爲雲時代而生,爲大規模多線程和併發性而設計的精簡的語言

  • 專門設計用於構建快速、可擴展的應用程序。

2008 年初,Unix 之父 Ken Thompson 實現了第一版 Go 編譯器,用於驗證之前的設計。這個編譯器先將 Go 代碼轉換爲 C 代碼,再由 C 編譯器編譯成二進制文件。

到 2008 年中旬,Go 的第一版設計基本結束了。這時,同樣在谷歌工作的 Ian Lance Taylor 給 Go 語言的三位作者發了一封電子郵件。他宣稱爲 Go 語言實現了一個 gcc 的前端,這也是 Go 語言的第二個編譯器。

2009 年,谷歌正式開源了 Go 語言,也是目前發展迅速的編程語言之一。

截至目前,衆多大公司在使用這門語言,這要歸功於雲計算和微服務的激增。Google、Uber、Dropbox、Alibaba、Riot Games、Tencent、ByteDance...

Go 安裝

聽到這,你是否很想在你的電腦上進行 Go 語言編程。所以 Let's Go~

安裝 Go 的最簡單方法是進入官網 下載 安裝包。該網站會自動檢測你所使用的操作系統並顯示你應該下載的 Go 的安裝程序:

如果上面的網站訪問不了的話,推薦選擇 Go 語言中文網進行下載,點 此處 進入如下下載界面 :

當前最新的 Go 版本是 1.17.5 版本:

MAC :https://studygolang.com/dl/golang/go1.17.5.darwin-amd64.pkg

Linux:https://studygolang.com/dl/golang/go1.17.5.linux-amd64.tar.gz

Windows:https://studygolang.com/dl/golang/go1.17.5.windows-amd64.msi

下載完 Go 安裝程序後,雙擊安裝程序,開始直接的安裝過程。建議直接使用默認的安裝設置,不需要改變任何這些設置。直到安裝完成。

Go 版本

使用 go version 命令,查看 Go 是否安裝成功:

$ go version
go version go1.16.3 linux/amd64

Hello World 程序

  1. 首先創建一個存放 Go 源代碼的文件夾:
$ mkdir -p GoProjects/Go/src/
  1. 創建 Hello.go 文件
$ cd ~/GoProjects/Go/src/
$ touch hello.go
  1. 使用文本編輯器打開 hello.go 文件,編輯第一個程序內容,點擊保存
package main

import "fmt"

func main() {
    fmt.Println("Hello World")
}

如圖所示:

保存完後運行,命令爲: go run hello.go ,就能看到輸出 Hello World 顯示在屏幕了。

$ go run hello.go
Hello World

Go 包括:可執行程序和庫程序。

可執行程序:我們可以直接從命令行運行。(Windows 一般爲 .exe 後綴的文件,Linux 一般不帶後綴)。在 Linux 中,我們可以使用 go build 命令生成可執行程序 hello,然後運行這個程序,同樣也能在控制檯中打印出 Hello World 。

$ go build hello.go 
$ ls
hello  hello.go
$ ./hello
Hello World

: 代碼的集合,把所有的代碼打包放到一塊,方便我們能夠在其他代碼中使用。

現在,讓我們來解釋一下 Hello.go 程序:

package main 是我們第一行的程序,每一個 Go 程序必須由一個 package 聲明,各種各樣的包是 Go 程序組織和複用代碼的方式。

import "fmt" : import 關鍵字能從其他的 packages 引入代碼爲我所用,fmt 包其實是英文 format 的縮寫,顧名思義,這個包實現了輸入和輸出的格式化。

func main() { } : 函數塊有輸入、輸出和一系列逐步執行的語句。

  • func 定義了一個函數塊,後面是函數名,所以這個函數叫 main 函數
  • () 內可以包括零個或多個參數,括號後可以有返回類型。
  • {} 內部是函數體。本例中的函數沒有參數,也沒有返回值,只有一個打印語句。

fmt.Println("Hello World") ,該聲明由三個部分組成:

  • 首先,我們訪問 fmt 包中的另一個函數 Println(即 fmt.Println 部分,Println 表示打印行)。
  • 然後我們創建一個包含 Hello World 的新字符串,並以該字符串作爲第一個也是唯一的參數調用(也稱爲調用或執行)該函數。

總結起來就是:創建一個新的可執行程序,該程序引用 fmt 庫幷包含一個名爲 main 的函數。 該函數不接受任何參數,不返回任何內容,並執行以下操作:訪問 fmt 包中包含的 Println 函數並使用一個參數調用它 - 字符串 Hello World。

Go 的基本數據類型

數字類型

Go 有幾種不同的類型來表示數字。 通常我們將數字分爲兩種不同的類型:整數和浮點數。

整型

整數,沒有小數部分的數字, 1, 2, 3,4,5.

與我們用來表示數字的基數爲 10 的十進制系統不同,計算機使用基數爲 2 的二進制系統。我們的系統由 10 個不同的數字組成。 一旦我們用盡了可用的數字,我們就通過使用 2 個(然後是 3、4、5 ……)個彼此相鄰的數字來表示更大的數字。 例如 9 後的數字是 10,99 後的數字是 100 等等。 計算機也這樣做,但它們只有 2 位數字而不是 10。所以計數看起來像這樣:0、1、10、11、100、101、110、111 等等。

Go 的整數類型有:uint8、uint16、uint32、uint64、int8、int16、int32 和 int64。

8、16、32 和 64 告訴我們每種類型使用多少位。

uint 表示“無符號整數”,而 int 表示“有符號整數”。 無符號整數只包含正數(或零)。

另外還有兩種別名類型:與 uint8 相同的 byte 和與 int32 相同的 rune。

字節是計算機上使用的極其常見的度量單位(1 字節 = 8 位,1024 字節 = 1 KB,1024 KB = 1 兆字節,……)

因此 Go 的字節數據類型經常用於其他類型的定義。 還有 3 種依賴於機器的整數類型:uint、int 和 uintptr。 它們依賴於機器,因爲它們的大小取決於您使用的架構類型。

浮點型

浮點數是包含小數部分(實數)的數字。 (1.234,123.4,0.00001234,12340000) 它們在計算機上的實際表示相當複雜,並不是真正需要知道如何使用它們。 所以現在我們只需要記住以下幾點:

浮點數是不精確的。 有時無法表示一個數字。 例如,計算 1.01-0.99 會得到 0.020000000000000018——一個非常接近我們預期的數字,但並不完全相同。

像整數一樣,浮點數也有一定的大小(32 位或 64 位)。 使用更大的浮點數會增加它的精度。 (它可以代表多少位數)

除了數字之外,還有其他幾個可以表示的值:“非數字”(NaN,對於 0/0 之類的東西)以及正無窮大和負無窮大。 (+∞ 和 −∞)

Go 有兩種浮點類型:float32 和 float64(通常也分別稱爲單精度和雙精度)以及兩種用於表示複數(帶虛部的數字)的附加類型:complex64 和 complex128。 通常我們在處理浮點數時應該堅持使用 float64。

package main

import (
    "fmt"
)

func main() {
    a := 3
    b := 4
    fmt.Println("1 + 1 =", 1+1)
    fmt.Println("a + b =", a+b)
    fmt.Println("1.0 + 1.0 =", 1.0+1.0)
}

結果爲:

1 + 1 = 2
a + b = 7
1.0 + 1.0 = 2

和 Hello World 程序一樣,它包含相同的 package main 行、相同的 import 行、相同的函數聲明並使用相同的 Println 函數。

這次不是打印字符串 Hello World,而是打印字符串 1 + 1 = 後跟表達式 1 + 1 的結果。

該表達式由三部分組成:數字文字 1(類型爲 int)、 + 運算符(表示加法)和另一個數字文字 1。

字符串類型

正如我們在前文中看到的,字符串是用於表示文本的具有確定長度的字符序列。 Go 字符串由單個字節組成,通常每個字符一個。 (中文等其他語言的字符用一個以上的字節表示)可以使用雙引號 "Hello World" 創建字符串文字。

它們之間的區別在於雙引號字符串不能包含換行符,並且它們允許特殊的轉義序列。 例如,\n 被換行符替換,\t 被替換爲製表符。

對字符串的幾種常見操作包括查找字符串的長度:

  • len("Hello World"),訪問字符串中的單個字符

  • "Hello World"[1],訪問字符串的第二個位置上的元素

  • 將兩個字符串連接在一起:"Hello " + "World" .

讓我們修改我們之前創建的程序來測試這些:

package main

import "fmt"

func main() {
    fmt.Println(len("Hello World"))
    fmt.Println("Hello World"[1])
    fmt.Println("Hello" + "World")
}
// 結果爲:
// 11
// 101
// HelloWorld

解釋:

  • 空格也被認爲是一個字符,所以字符串的長度是 11 而不是 10

  • 字符串從 0 開始“索引”而不是 1。 [1] 給你第二個元素而不是第一個。 另請注意,當您運行此程序時,您看到的是 101 而不是 e。 這是因爲字符由一個字節表示(記住一個字節是一個整數)。

  • 連接使用與加法相同的符號。Go 編譯器根據參數的類型計算出要做什麼, 由於 + 的兩側都是字符串,因此編譯器假定您的意思是連接而不是加法。 (加法對字符串沒有意義)

布爾型

布爾值(以 George Boole 命名)是一種特殊的 1 位整數類型,用於表示真假( ture 和 false)。

通常可以把三個邏輯運算符與布爾值一起使用:

  • && (與,and)

  • || ( 或,or)

  • ! (非,not)

package main

import "fmt"

func main() {
    
    fmt.Println(true && true)
    fmt.Println(true && false)
    fmt.Println(true || true)
    fmt.Println(true || false)
    fmt.Println(!true)
}

運行後的結果爲:

true
false
true
true
false

總結

本篇文章首先介紹了 Go 語言的一些來龍去脈、 Go 語言的特點與優點,緊接着說明了 Go 的安裝方法,並開始編寫了第一個 Hello World 程序,最後介紹了基本數據類型。

這可以說是快速入門的第一步,知道了 Go 是咋回事,Go 有哪些基礎數據。下一篇我們繼續探索 Go 語言更多知識。敬請期待!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章