基礎篇一開始,將學習 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...