30分鐘搞定GO語言 一

2021-08-13 23:31:41 字數 2621 閱讀 3901

基礎篇
一開始,將學習 go 程式的基本元件:包、變數和函式。

每個 go 程式都是由包組成的。

程式執行的入口是包main。

這個程式使用並匯入了包fmt和math/rand。

按照慣例,包名與匯入路徑的最後乙個目錄一致。例如,math/rand包由package rand語句開始。

注意:這個程式的執行環境是確定性的,因此rand.intn每次都會返回相同的數字。 (為了得到不同的隨機數,需要提供乙個隨機數種子)

這個**用圓括號組合了匯入,這是「打包」匯入語句。

同樣可以編寫多個匯入語句,例如:

importfmt

importmath

不過使用打包的匯入語句是更好的形式。

import(

fmtmath

)

在 go 中,首字母大寫的名稱是被匯出的。

在匯入包之後,你只能訪問包所匯出的名字,任何未匯出的名字是不能被包外的**訪問的。

foo和foo都是被匯出的名稱。名稱foo是不會被匯出的。

函式可以沒有引數或接受多個引數。

在這個例子中,add接受兩個int型別的引數。

注意型別在變數名之後。

在這個例子中 ,

xint,yint
被縮寫為

x,yint
函式可以返回任意數量的返回值。

swap函式返回了兩個字串。

go 的返回值可以被命名,並且就像在函式體開頭宣告的變數那樣使用。

返回值的名稱應當具有一定的意義,可以作為文件使用。

沒有引數的return語句返回各個返回變數的當前值。這種用法被稱作「裸」返回。

直接返回語句僅應當用在像下面這樣的短函式中。在長的函式中它們會影響**的可讀性。

var語句定義了乙個變數的列表;跟函式的引數列表一樣,型別在後面。

就像在這個例子中看到的一樣,var語句可以定義在包或函式級別。

變數定義可以包含初始值,每個變數對應乙個。

如果初始化是使用表示式,則可以省略型別;變數從初始值中獲得型別。

在函式中,:=簡潔賦值語句在明確型別的地方,可以用於替代var定義。

函式外的每個語句都必須以關鍵字開始(var、func、等等),:=結構不能使用在函式外。

go 的基本型別有basic types

bool

string

intint8int16int32int64

uintuint8uint16uint32uint64uintptr

byte//uint8的別名

rune//int32的別名

//代表乙個unicode碼

float32float64

complex64complex128

這個例子演示了具有不同型別的變數。 同時與匯入語句一樣,變數的定義「打包」在乙個語法塊中。

int,uint和uintptr型別在32位的系統上一般是32位,而在64位系統上是64位。當你需要使用乙個整數型別時,你應該首選int,僅當有特別的理由才使用定長整數型別或者無符號整數型別。

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

零值是:

表示式t(v)將值v轉換為型別t。

一些關於數值的轉換:

variint=42

varffloat64=float64(i)

varuuint=uint(f)

或者,更加簡單的形式:

i:=42

f:=float64(i)

u:=uint(f)

與 c 不同的是 go 的在不同型別之間的專案賦值時需要顯式轉換。 試著移除例子中float64或int的轉換看看會發生什麼。

在定義乙個變數卻並不顯式指定其型別時(使用:=語法或者var =表示式語法), 變數的型別由(等號)右側的值推導得出。

當右值定義了型別時,新變數的型別與其相同:

variint

j:=i//j也是乙個int

但是當右邊包含了未指名型別的數字常量時,新的變數就可能是int、float64或complex128。 這取決於常量的精度:

i:=42//int

f:=3.142//float64

g:=0.867+0.5i//complex128

嘗試修改演示**中v的初始值,並觀察這是如何影響其型別的。

常量的定義與變數類似,只不過使用const關鍵字。

常量可以是字元、字串、布林或數字型別的值。

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

數值常量是高精度的值。

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

也嘗試一下輸出needint(big)吧。

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

◆◆◆ ◆◆

作者介紹:張洋銘,投資人中最懂動漫的程式設計師,負責plugandplay早期科技類專案投資,個人關注動漫智慧型助理。

5分鐘搞定Schema

事先宣告 搞定不是精通,只是能夠運用!其實schema很簡單,之前寫過dtd,比dtd學習成本還低!最近做的專案基於檔案系統的,一堆的xml檔案,所以想寫個驗證,也方便ide操作,既然推薦schema,那就用schema d 不廢話,看xml檔案。ivan hihello 這個應該算是個比較典型的x...

5分鐘搞定快速排序

直接切入主題,快速排序分為兩過程 挖抗填數 分治法 先說下分治法,顧名思義就是 分而治之 的核心思想。簡單舉個例子體會一下 現在有100個人需要按照身高排成一列。首先,定個身高基準1.7m 定得太高和太低都會打破平衡 高與1.7m的都站在一列的右端,低於1.7m的都站在一列的左端。1.7m即為左右端...

5分鐘搞定快速排序

首先找到陣列中的乙個基準值 通常是中間值 遍歷陣列,如果比基準值小就放到左邊,比基準值大放到右邊 以基準值左右兩邊的子列作為新數列,不斷重複第一步和第二步 迭代法 def quick sort arr if len arr 2 return arr mid arr len arr 2 基準值 lef...