30分鐘搞定GO語言(一)

基礎(chǔ)篇

一開始,將學(xué)習(xí) Go 程序的基本組件:包、變量和函數(shù)。

每個 Go 程序都是由包組成的。

程序運行的入口是包?main?。

這個程序使用并導(dǎo)入了包?"fmt"?和?"math/rand"?。

按照慣例,包名與導(dǎo)入路徑的最后一個目錄一致。例如,"math/rand"?包由?package rand?語句開始。

注意:這個程序的運行環(huán)境是確定性的,因此?rand.Intn?每次都會返回相同的數(shù)字。 (為了得到不同的隨機數(shù),需要提供一個隨機數(shù)種子)


導(dǎo)入

這個代碼用圓括號組合了導(dǎo)入,這是“打包”導(dǎo)入語句。

同樣可以編寫多個導(dǎo)入語句,例如:

import?"fmt"
import?"math"

不過使用打包的導(dǎo)入語句是更好的形式。

import?(??????????????
"fmt"
"math"
)

在 Go 中,首字母大寫的名稱是被導(dǎo)出的。

在導(dǎo)入包之后,你只能訪問包所導(dǎo)出的名字,任何未導(dǎo)出的名字是不能被包外的代碼訪問的。

Foo?和?FOO?都是被導(dǎo)出的名稱。名稱?foo?是不會被導(dǎo)出的。


函數(shù)

函數(shù)可以沒有參數(shù)或接受多個參數(shù)。

在這個例子中,?add?接受兩個?int?類型的參數(shù)。

注意類型在變量名?之后?。

當(dāng)兩個或多個連續(xù)的函數(shù)命名參數(shù)是同一類型,則除了最后一個類型之外,其他都可以省略。

在這個例子中 ,

x?int,?y?int

被縮寫為

x,?y?int


多值返回

函數(shù)可以返回任意數(shù)量的返回值。

swap?函數(shù)返回了兩個字符串。


命名返回值

Go 的返回值可以被命名,并且就像在函數(shù)體開頭聲明的變量那樣使用。

返回值的名稱應(yīng)當(dāng)具有一定的意義,可以作為文檔使用。

沒有參數(shù)的?return?語句返回各個返回變量的當(dāng)前值。這種用法被稱作“裸”返回。

直接返回語句僅應(yīng)當(dāng)用在像下面這樣的短函數(shù)中。在長的函數(shù)中它們會影響代碼的可讀性。


變量

var?語句定義了一個變量的列表;跟函數(shù)的參數(shù)列表一樣,類型在后面。

就像在這個例子中看到的一樣,?var?語句可以定義在包或函數(shù)級別。


初始化變量

變量定義可以包含初始值,每個變量對應(yīng)一個。

如果初始化是使用表達(dá)式,則可以省略類型;變量從初始值中獲得類型。


短聲明變量

在函數(shù)中,?:=?簡潔賦值語句在明確類型的地方,可以用于替代?var?定義。

函數(shù)外的每個語句都必須以關(guān)鍵字開始(?var?、?func?、等等),?:=?結(jié)構(gòu)不能使用在函數(shù)外。


基本類型

Go 的基本類型有Basic types

bool

string

int??int8??int16??int32??int64
uint?uint8?uint16?uint32?uint64?uintptr

byte?//?uint8?的別名

rune?//?int32?的別名
?????//?代表一個Unicode碼

float32?float64

complex64?complex128

這個例子演示了具有不同類型的變量。 同時與導(dǎo)入語句一樣,變量的定義“打包”在一個語法塊中。

int,uint?和?uintptr?類型在32位的系統(tǒng)上一般是32位,而在64位系統(tǒng)上是64位。當(dāng)你需要使用一個整數(shù)類型時,你應(yīng)該首選?int,僅當(dāng)有特別的理由才使用定長整數(shù)類型或者無符號整數(shù)類型。


零值

變量在定義時沒有明確的初始化時會賦值為?零值?。

零值是:

數(shù)值類型為?0?,

布爾類型為?false?,

字符串為?""?(空字符串)。


類型轉(zhuǎn)換

表達(dá)式?T(v)?將值?v?轉(zhuǎn)換為類型?T?。

一些關(guān)于數(shù)值的轉(zhuǎn)換:

var?i?int?=?42
var?f?float64?=?float64(i)
var?u?uint?=?uint(f)

或者,更加簡單的形式:

i?:=?42
f?:=?float64(i)
u?:=?uint(f)

與 C 不同的是 Go 的在不同類型之間的項目賦值時需要顯式轉(zhuǎn)換。 試著移除例子中?float64?或?int?的轉(zhuǎn)換看看會發(fā)生什么。


類型推導(dǎo)

在定義一個變量卻并不顯式指定其類型時(使用?:=?語法或者?var =?表達(dá)式語法), 變量的類型由(等號)右側(cè)的值推導(dǎo)得出。

當(dāng)右值定義了類型時,新變量的類型與其相同:

var?i?int
j?:=?i?//?j?也是一個?int

但是當(dāng)右邊包含了未指名類型的數(shù)字常量時,新的變量就可能是?int?、?float64?或?complex128。 這取決于常量的精度:

i?:=?42???????????//?int
f?:=?3.142????????//?float64
g?:=?0.867?+?0.5i?//?complex128

嘗試修改演示代碼中?v?的初始值,并觀察這是如何影響其類型的。


常量

常量的定義與變量類似,只不過使用?const?關(guān)鍵字。

常量可以是字符、字符串、布爾或數(shù)字類型的值。

常量不能使用?:=?語法定義。


數(shù)值常量

數(shù)值常量是高精度的?值?。

一個未指定類型的常量由上下文來決定其類型。

也嘗試一下輸出?needInt(Big)?吧。

(int?可以存放最大64位的整數(shù),根據(jù)平臺不同有時會更少。)


◆??◆??◆ ?◆??◆??

來源:

作者介紹:張洋銘,投資人中最懂動漫的程序員,負(fù)責(zé)PlugandPlay早期科技類項目投資,個人關(guān)注動漫智能助理。


微信公眾號:張洋銘Ocean(ocean_anidata)

BP請投遞至:ocean.zhang@plugandplaychina.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容