帶你學夠浪:Go語言基礎系列 - 8分鐘學基礎語法

文章每週持續更新,原創不易,「三連」讓更多人看到是對我最大的肯定。可以微信搜索公衆號「 後端技術學堂 」第一時間閱讀(一般比博客早更新一到兩篇)

對於一般的語言使用者來說 ,20% 的語言特性就能夠滿足 80% 的使用需求,剩下在使用中掌握。

基於這一理論,Go 基礎系列的文章不會刻意追求面面俱到,但該有知識點都會覆蓋,目的是帶你快跑趕上 Golang 這趟新車。

Hurry up , Let's go !

一個好消息一個壞消息一個潛規則

Go 的語法類似 C 語言,你是從 C/C++ 語言過來的話學習成本很低,其他語言過來甚至沒有編程基礎也沒關係,這門語言入門很輕鬆。

好消息是你的鍵盤得救了,在 Go 的世界裏不用在每個語句後面加分號了,C 和C++ 程序員聽了喜大普奔,鍵盤不那麼容易磨損了。

壞消息帶給習慣花括號換行的朋友,在 Go 中第一個花括號 { 不能換行寫,必須寫在同一行,否則編譯不過!

潛規則是任何在 Go 中定義的變量必須使用,如果定義了變量不使用,編譯不過!

怎麼樣?是不是感覺到滿滿的霸道總裁味道?

其實約束多了,程序員自由發揮的空間變少,出錯的概率也會大大降低,Google 的大佬們怕你犯錯,操碎了心。

概念

Go 語言程序都由包構成,類似其他語言中的模塊概念,主程序都從 main 包開始運行。

所以一個程序開頭是下面的語句:

package main

在程序中也可以導入其他包,這樣就可以使用其他包定義的函數或變量。

導入

導入包語法有多種姿勢。

導入姿勢一:單獨導入

import os  // 導入 os 包
import fmt /* 導入 fmt 包*/

fmt 包:包內有格式化 IO 函數,類似 C 中的 stdio.h 和 C++ 中的 iostream ,初學者必備,導它!

os 包 :中實現了一些 操作系統函數,不依賴平臺的接口

另外,關於註釋,如你所見,完全就是 C 語言裏的註釋形式,///**/ 都是允許的。

導入姿勢二:分組導入

import (
	"fmt"
	"os"
)

可以把需要的包,用括號放在一起導入。

導入姿勢三:指定別名導入

可以在導入的時候指定導入包的別名,這樣在調用包函數的時候,可以直接使用包別名。

import f "fmt" // 用別名f 代替 fmt
f.Println("go go go") // 用 f 代替了 fmt 調用 Println 函數

包導出名稱約定

包中定義的函數或變量,如果是大寫字母開頭,那麼它就是可以導出的,外部使用包的用戶可以訪問到,類似 C++ 中的 public 標識。相反,小寫字母開頭的名字外部無法使用,使用會報錯。

// 如下,Println 和 Getenv 都是大寫的名字
fmt.Println(os.Getenv("GOPATH"))

基本類型

內置類型

Go 語言內建的數據類型有下面這些,其實基本上看類型名字,就差不多能知道是什麼類型了。

int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error

平常用的最多的類型:

int 代表整型,在 32 位系統上通常爲 32 位,在 64 位系統上則爲 64 位。

string 字符串類型

bool 布爾類型,分 truefalse 兩種值。

創建類型

下面的語法創建一個新的類型,類似C++中的typedef語法。

type 新類型名字 底層類型

type ProgramType string  // 定義新類型 ProgramType
var t1 ProgramType = "Golang"
var t2 ProgramType = "C++"

不過Go中創建的新類型即使底層類型是一致的也不能相互操作,這樣起到很好的類型隔離作用

比如下面的代碼,雖然ProgramTypeCompanyType 都是 string 類型,但是不能相互操作,下面舉例說明:

type ProgramType string  // 定義新類型 ProgramType
type CompanyType string  // 定義新類型 ProgramType
var t2, t2 ProgramType = "Golang", "C++"
var c1, c2 CompanyType = "Google", "Tencent"
fmt.Println(t1+t2)       // 同類型相加合法
fmt.Println(t1+c1)		// 不同類型相加非法

類型轉換

不像 C 中有隱式類型轉換,在 Go 中 不同類型的項之間賦值時需要顯式轉換,否則編譯會報錯!語法上,相對於 C 語言的強制轉換語法換了下括號的位置,Go 語法如下。

T(v) // 把值 v 轉換爲類型 T

舉例:

var varint int = 66
var varf float32 = float32(varint)  // int 轉換 float32
fmt.Printf("%T %v %T %v \n", varint, varint, varf, varf) // %T輸出值的類型  %v輸出值

變量

聲明

Go 裏面的變量聲明其實和 C 語言差不多,唯一的區別是把變量類型放在在變量名字後面,另外多了一個 var 關鍵字標識。

var imVar int // 聲明瞭一個 int 類型的 imVar 變量

當然也可以多個同類型變量一起聲明

var imVar1, imVar2, imVar3 int // 一口氣聲明瞭三個 int 類型的變量

或者,多個不同類型的變量聲明分組一起聲明

var (
	   i int
    b bool
    s string
)

初始化

未初始化

未初始化的對象會被賦予零值,也就是默認值。

  • 數值類型初始值 0
  • 布爾類型初始值 false
  • 字符串爲初始值 ""(空字符串)

普通初始化

可以聲明之後單個初始化

var imVar int
imVar = 6

也可以聲明和初始化一步到位

var imVar0 int = 7

還可以批量聲明加初始化一步到位

var imVar4, imVar5 int = 4, 5

多個不同類型的變量聲明和初始化可以分組同時進行,像下面這樣。

var (
    i int    = 1
    b bool   = false
    s string = "golang"
)

偷懶初始化

類型自動推導

如果初始化式右邊的值是已存在確定類型的值,可以偷懶省略變量類型,聰明的 Go 會自動推導類型。

var imVar4, imVar5 = 4, 5  // 省略了左邊的 int 類型,自動推導imVar4, imVar5是int類型

簡短初始化

在函數內部,可以使用簡短賦值語句:=來代替 var 關鍵字聲明並初始化變量。

imVar6, imVar7 := 8, 9  // 聲明並初始化了 imVar6, imVar7

常量

常量用 const 關鍵字聲明,並且聲明之後必須緊接着賦值,常量可以是字符、字符串、布爾值或數值 ,注意:常量不能用 := 語法聲明

const imCnt int = 1 // 帶類型的常量定義
const imCnt1 = 1    // 省略類型的常量定義,自動推導類型

Go 語言內建下面幾種常量

true false iota nil // 內建常量

函數

聲明

函數用關鍵字 func 來聲明,帶參數列表,把返回值類型放在最後,下面定義了一個簡單的乘法函數,帶兩個整型參數,返回值也是整型。

func mult(i int, j int) int {
	return i * j
}

當函數參數類型相同時,可以只寫最後一個參數的類型,下面這樣簡寫也是可以的。

func mult(i, j int) int {
	return i * j
}

返回值

多返回值

函數返回值可以是一個,也可以是多個,下面的函數就返回了 i 的平凡和 j 的平方兩個返回值。

func more(i, j int) (int, int) {
	return i * i, j * j
}

返回值命名

前面例子只指定了返回值類型,可以指定返回值名稱,這樣更加便於理解,同時,指定的名稱可在函數內使用。

func retName(i, j int) (x, y int) {
	x = i * i
	y = j * j
	return x, y // 可用 return 代替,表示返回所有已命名的返回值。
}

總結

通過本文的學習,我們掌握了 Golang 中的幾個基礎概念和用法:包、基本數據類型、變量、常量、函數。這些語法基礎是Golang 的下層建築,萬丈高樓平地起,本節爲後續學習打下了基礎。

感謝各位的閱讀,文章的目的是分享對知識的理解,技術類文章我都會反覆求證以求最大程度保證準確性,若文中出現明顯紕漏也歡迎指出,我們一起在探討中學習.

今天的技術分享就到這裏,我們下期再見。


原創不易,不想被白票,如果在我這有收穫,就動動手指「點贊」和「轉發」是對我持續創作的最大支持。

可以微信搜索公衆號「 後端技術學堂 」回覆「資料」「1024」有我給你準備的各種編程學習資料。文章每週持續更新,我們下期見!

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