第一個Go程序
解讀:
a. package
Go源文件開頭必須使用package聲明代碼所屬包,包是Go代碼分發(fā)的最基本單位。若程序需要運(yùn)行包名必須為main墙杯。
b. import
import用于導(dǎo)入程序依賴的所有的包班缰。此程序依賴于fmt包法梯。
c. func
func用于定義函數(shù)勋磕。main函數(shù)是程序的入口,若程序需要運(yùn)行必須聲明main函數(shù),main函數(shù)無參數(shù)也無返回值
d. fmt.Println
調(diào)用fmt.Println函數(shù)將參數(shù)信息打印到控制臺
編譯&運(yùn)行
a. go build: 用于編譯&鏈接程序或包
go build -work -x -o helloworld.exe main.go
b. go run:用于直接運(yùn)行程序
go run -work -x main.go
c. go clean:清除編譯文件
常用參數(shù):
- -x: 打印編譯過程執(zhí)行的命令侄刽,并完成編譯或運(yùn)行
- -n: 只打印編譯過程執(zhí)行命令
- -work:打印編譯過程的臨時目錄
- -o: 指定編譯結(jié)果文件
程序結(jié)構(gòu)
Go源文件以package聲明開頭,說明源文件所屬的包朋凉,接著使用import導(dǎo)入依賴的包,其次為包級別的變量醋安、常量杂彭、類型和函數(shù)的聲明和賦值墓毒。函數(shù)中可定義局部的變量、常量
基本組成元素
標(biāo)識符
標(biāo)識符是編程時所使用的名字亲怠,用于給變量所计、常量、函數(shù)团秽、類型主胧、接口、包名等進(jìn)行命名习勤,以建立名稱和使用之間的關(guān)系踪栋,Go語言標(biāo)識符的命名規(guī)則:
- 只能由非空字母(Unicode)、數(shù)字图毕、下劃線(_)組成
- 只能以字母或下劃線開頭
- 不能Go語言關(guān)鍵字
建議:
- 避免使用Go語言預(yù)定義標(biāo)識符
- 建議使用駝峰式
說明
- 標(biāo)識符區(qū)分大小寫
Go語言提供一些預(yù)先定義的標(biāo)識符用來表示內(nèi)置的常量夷都、類型、函數(shù)予颤,在自定義標(biāo)識符時應(yīng)避免使用:
- 內(nèi)置常量:true囤官、false、nil蛤虐、iota
- 內(nèi)置類型:bool党饮、byte、rune驳庭、int刑顺、int8、int16嚷掠、int32捏检、int64、uint不皆、uint8贯城、unit16、unit32霹娄、unit64能犯、uintptr、float32犬耻、float64踩晶、complex64、complex128枕磁、string渡蜻、error
- 內(nèi)置函數(shù):make、len、cap茸苇、new排苍、append、copy学密、close淘衙、delete、complex腻暮、real彤守、imag、panic哭靖、recover
- 空白標(biāo)識符:_
關(guān)鍵字
關(guān)鍵字用于特定的語法結(jié)構(gòu)具垫,Go語言定義25關(guān)鍵字:
- 聲明:import、package
- 實(shí)體聲明和定義:chan款青、const做修、func、interface抡草、map饰及、struct、type康震、var
- 流程控制:break燎含、case、continue腿短、default屏箍、defer、else橘忱、fallthrough赴魁、for、go钝诚、goto颖御、if、range凝颇、return潘拱、select、switch
字面量
字面量是值的表示方法拧略,常用與對變量/常量進(jìn)行初始化芦岂,主要分為:
標(biāo)識基礎(chǔ)數(shù)據(jù)類型值的字面量,例如:0, 1.1, true, 3 + 4i, 'a', "我愛中國"
構(gòu)造自定義的復(fù)合數(shù)據(jù)類型的類型字面量垫蛆,例如:type Interval int
用于表示符合數(shù)據(jù)類型值的復(fù)合字面量禽最,用來構(gòu)造array腺怯、slice、map川无、struct的值瓢喉,例如:{1,
2, 3}
操作符
- 算術(shù)運(yùn)算符:+、-舀透、*、/决左、%愕够、++、--
- 關(guān)系運(yùn)算符:>佛猛、>=惑芭、<、<=继找、==遂跟、!=
- 邏輯運(yùn)算符:&&、||婴渡、!
- 位運(yùn)算符:&幻锁、|、边臼、<<哄尔、>>、&
- 賦值運(yùn)算符:=柠并、+=岭接、-=、*=臼予、/=鸣戴、%=、&=粘拾、|=窄锅、^=、<<=半哟、>>=
- 其他運(yùn)算符:&(單目)酬滤、*(單目)、.(點(diǎn))寓涨、-(單目)盯串、…、<-
分割符
小括號(), 中括號[]戒良,大括號{}体捏,分號;,逗號,
聲明
聲明語句用于定義程序的各種實(shí)體對象,主要有:
- 聲明變量的var
- 聲明常量的const
- 聲明函數(shù)的func
- 聲明類型的type
變量
變量是指對一塊存儲空間定義名稱几缭,通過名稱對存儲空間的內(nèi)容進(jìn)行訪問或修改河泳,使用var進(jìn)行變量聲明,常用的語法為:
- var 變量名 變量類型 = 值
定義變量并進(jìn)行初始化年栓,例如:
var name string = "silence"
- var 變量名 變量類型
定義變量使用零值進(jìn)行初始化拆挥,例如:
var age int
- var 變量名 = 值
定義變量,變量類型通過值類型進(jìn)行推導(dǎo)某抓,例如:
var isBoy = true
- var 變量名1, 變量名2 , …, 變量名n 變量類型
定義多個相同類型的變量并使用零值進(jìn)行初始化纸兔,例如:
var prefix, suffix string
- var變量名1, 變量名2 , …, 變量名n 變量類型 = 值1, 值2, …, 值n
定義多個相同類型的變量并使用對應(yīng)的值進(jìn)行初始化,例如:
var prev, next int = 3, 4
- var變量名1, 變量名2 , …, 變量名n = 值1, 值2, …, 值n
定義多個變量并使用對應(yīng)的值進(jìn)行初始化否副,變量的類型使用值類型進(jìn)行推導(dǎo)汉矿,類型可不相同,例如:
var name, age = "silence", 30
-
批量定義
var ( 變量名1 變量類型1 = 值1 變量名2 變量類型2 = 值2 )
定義多個變量并進(jìn)行初始化备禀,變量類型也可省略
例如:
var (
name string = "silence"
age int = 30
height = 1.68
)
初始化表達(dá)式可以使用字面量洲拇、任何表達(dá)式、函數(shù)
簡短聲明
在函數(shù)內(nèi)可以通過簡短聲明語句聲明并初始化變量曲尸,可通過簡短聲明同時聲明和初始化多個變量赋续,需要注意操作符左側(cè)的變量至少有一個未定義過
賦值
可以通過賦值運(yùn)算=更新變量的值,Go語言支持通過元組賦值同時更新多個變量的值队腐,例如:n1, n2 = 1, 2
蚕捉,可用于兩個變量的交換x, y = y,x
常量
常量用于定義不可被修改的的值,需要在編譯過程中進(jìn)行計(jì)算柴淘,只能為基礎(chǔ)的數(shù)據(jù)類型布爾迫淹、數(shù)值、字符串为严,使用const進(jìn)行常量聲明敛熬,常用語法:
- const 常量名 類型 = 值
定義常量并進(jìn)行初始化,例如:
const pi float64 = 3.1415926
- const 常量名 = 值
定義常量第股,類型通過值類型進(jìn)行推導(dǎo)应民,例如:
const e = 2.7182818
-
批量定義
const ( 常量名1 類型1 = 值1 常量名2 類型2 = 值2 )
定義多個變量并進(jìn)行初始化,變量類型也可省略夕吻,并且除了第一個常量值外其他常量可同時省略類型和值诲锹,表示使用前一個常量的初始化表達(dá)式
例如:
const (
name string = "silence"
age int = 30
)
const (
name string = "silence"
desc
)
常量之間的運(yùn)算,類型轉(zhuǎn)換涉馅,以及對常量調(diào)用函數(shù)len归园、cap、real稚矿、imag庸诱、complex捻浦、unsafe.Sizeof得到的結(jié)果依然為常量
作用域
作用域指變量可以使用范圍。go語言使用大括號顯示的標(biāo)識作用域范圍桥爽,大括號內(nèi)包含一連串的語句朱灿,叫做語句塊。語句塊可以嵌套钠四,語句塊內(nèi)定義的變量不能在語句塊外使用
常見隱式語句塊:
- 全語句塊
- 包語句塊
- 文件語句塊
- if盗扒、switch、for缀去、select环疼、case語句塊
作用域內(nèi)定義變量只能被聲明一次且變量必須使用,否則編譯錯誤朵耕。在不同作用域可定義相同的變量,此時局部將覆蓋全局
注釋
Go支持兩種注釋方式淋叶,行注釋和塊注釋:
- 行注釋:以//開頭阎曹,例如:
//我是行注釋
- 塊注釋:以/*開頭,以*/結(jié)尾煞檩,例如:
/*我是塊注釋*/
問題跟蹤
最基本的問題跟蹤方式為打印日志处嫌,我們可以fmt包中提供的Println、Print斟湃、Printf函數(shù)用于將信息打印到控制臺熏迹,幫助我們進(jìn)行問題調(diào)試,基本使用方法: