Go语言编程设计学习Day1:helloworld 变量 常量
簡(jiǎn)單認(rèn)識(shí)go語(yǔ)言
簡(jiǎn)單了解一下go語(yǔ)言的歷史, 二十世紀(jì)八十年代,肯·湯普遜在內(nèi)的Plan 9項(xiàng)目原班人馬加入了谷歌在Google,他們創(chuàng)造了Go語(yǔ)言。早在2007年9月,Go語(yǔ)言還是這幫大牛的20%自由時(shí)間
的實(shí)驗(yàn)項(xiàng)目。幸運(yùn)的是,到了2008年5月,Google發(fā)現(xiàn)了Go語(yǔ)言的巨大潛力,從而開始全力支持
這個(gè)項(xiàng)目,讓這批人可以全身心投入Go語(yǔ)言的設(shè)計(jì)和開發(fā)工作中。Go語(yǔ)言的第一個(gè)版本在2009
年11月正式對(duì)外發(fā)布,并在此后的兩年內(nèi)快速迭代,發(fā)展迅猛。第一個(gè)正式版本的Go語(yǔ)言于2012
年3月28日正式發(fā)布,讓Go語(yǔ)言迎來(lái)了第一個(gè)引人矚目的里程碑。
谷歌一貫的作風(fēng) 擁抱開源,所以我們也可以在github上去下載go的源碼來(lái)查看,甚至為go貢獻(xiàn)一些新的內(nèi)容
下面羅列一下Go語(yǔ)言最主要的特性:
? 自動(dòng)垃圾回收
? 更豐富的內(nèi)置類型
? 函數(shù)多返回值
? 錯(cuò)誤處理
? 匿名函數(shù)和閉包
? 類型和接口
? 并發(fā)編程
? 反射
? 語(yǔ)言交互性
配置開發(fā)環(huán)境
-
下載go
-
設(shè)置gopath(go代碼存放空間), goroot(go語(yǔ)言sdk/bin文件夾)
-
vscode 導(dǎo)入go的多個(gè)插件
-
創(chuàng)建go的代碼存放結(jié)構(gòu)
第一個(gè)go程序
// 聲明文件所存在的位置 packge package main// 進(jìn)入需要使用的工具庫(kù)(包) import "fmt"// main 函數(shù) 程序的入口 func main(){fmt.Println("hello golang") }常用的命令
- 執(zhí)行g(shù)o文件 go run xxxx
- 生成可執(zhí)行文件 go build xxx
變量
? 我們可以將一個(gè)程序 看作一個(gè)小世界 不論哪個(gè)世界 都有構(gòu)成他的一部分, 變量就是構(gòu)建程序世界的一部分
變量實(shí)際上就是存放在內(nèi)存中的一個(gè)數(shù)據(jù)空間的表示 他可能有不同的類型 .
Go語(yǔ)言的變量聲明方式與C和C++語(yǔ)言有明顯的不同。對(duì)于純粹的變量聲明,Go語(yǔ)言引入了
Go語(yǔ)言的變量聲明方式與C和C++語(yǔ)言有明顯的不同。對(duì)于純粹的變量聲明,Go語(yǔ)言引入了
關(guān)鍵字var,而類型信息放在變量名之后,示例如下:
變量聲明語(yǔ)句不需要使用分號(hào)作為結(jié)束符。與C語(yǔ)言相比,Go語(yǔ)言摒棄了語(yǔ)句必須以分號(hào)作
為語(yǔ)句結(jié)束標(biāo)記的習(xí)慣。
關(guān)鍵字var,而類型信息放在變量名之后,示例如下:
變量的使用流程
在go 語(yǔ)言中 聲明變量(類型有默認(rèn)值可以直接使用)就必須要使用, 否則會(huì)出現(xiàn)編譯異常
- 聲明
- 復(fù)制
- 使用
示例:
var age intage = 18fmt.Println("age=",age)變量初始化方式
? 對(duì)于聲明變量時(shí)需要進(jìn)行初始化的場(chǎng)景,var關(guān)鍵字可以保留,但不再是必要的元素
var v1 int = 10 // 正確的使用方式1 var v2 = 10 // 正確的使用方式2,編譯器可以自動(dòng)推導(dǎo)出v2的類型 v3 := 10 // 正確的使用方式3,編譯器可以自動(dòng)推導(dǎo)出v3的類型? 指定類型已不再是必需的,Go編譯器可以從初始化表達(dá)式的右值推導(dǎo)出該變量應(yīng)該聲明為
哪種類型,這讓Go語(yǔ)言看起來(lái)有點(diǎn)像動(dòng)態(tài)類型語(yǔ)言,盡管Go語(yǔ)言實(shí)際上是不折不扣的強(qiáng)類型語(yǔ)
言(靜態(tài)類型語(yǔ)言)。
需要注意的事 := 左側(cè)的變量不應(yīng)該是已經(jīng)被聲明過的 否則會(huì)出現(xiàn)異常
var i int i := 2 會(huì)導(dǎo)致類似如下的編譯錯(cuò)誤: no new variables on left side of :=變量賦值
? 在Go語(yǔ)法中,變量初始化和變量賦值是兩個(gè)不同的概念。下面為聲明一個(gè)變量之后的賦值
過程:
? Go語(yǔ)言的變量賦值與多數(shù)語(yǔ)言一致,但Go語(yǔ)言中提供了C/C++程序員期盼多年的多重賦值功
能,比如下面這個(gè)交換i和j變量的語(yǔ)句:
? 在不支持多重賦值的語(yǔ)言中,交互兩個(gè)變量的內(nèi)容需要引入一個(gè)中間變量:
t = i; i = j; j = t;匿名變量
? 在Go中這種情況可以通過結(jié)合使用多重返回和匿名變量來(lái)避免定義一些不必要變量的丑陋寫法,讓代碼看起來(lái)更加優(yōu)雅。
? 假設(shè) GetName()函數(shù)的定義如下,它返回3個(gè)值,分別為firstName、 lastName和
nickName:
輸出結(jié)果:
chibi maruko? 這種用法可以讓代碼非常清晰,基本上屏蔽掉了可能混淆代碼閱讀者視線的內(nèi)容,從而大幅降低溝通的復(fù)雜度和代碼維護(hù)的難度。
常量
? 在Go語(yǔ)言中,常量是指編譯期間就已知且不可改變的值。常量可以是數(shù)值類型(包括整型、浮點(diǎn)型和復(fù)數(shù)類型)、布爾類型、字符串類型等。
字面常量
? 所謂字面常量(literal),是指程序中硬編碼的常量,如:
-12 3.14159265358979323846 // 浮點(diǎn)類型的常量 3.2+12i // 復(fù)數(shù)類型的常量 true // 布爾類型的常量 "foo" // 字符串常量? 在go語(yǔ)言中 它是無(wú)類型的。只要這個(gè)常量在相應(yīng)類型的值域
范圍內(nèi),就可以作為該類型的常量
常量定義
? 通過const關(guān)鍵字,你可以給字面常量指定一個(gè)友好的名字:
const Pi float64 = 3.14159265358979323846 const zero = 0.0 // 無(wú)類型浮點(diǎn)常量 const ( size int64 = 1024 eof = -1 // 無(wú)類型整型常量 ) const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重賦值 const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo", 無(wú)類型整型和字符串常量? Go的常量定義可以限定常量類型,但不是必需的。如果定義常量時(shí)沒有指定類型,那么它
與字面常量一樣,是無(wú)類型常量。
常量定義的右值也可以是一個(gè)在編譯期運(yùn)算的常量表達(dá)式,比如
預(yù)定義常量
? Go語(yǔ)言預(yù)定義了這些常量:true、false和iota。
? iota比較特殊,可以被認(rèn)為是一個(gè)可被編譯器修改的常量,在每一個(gè)const關(guān)鍵字出現(xiàn)時(shí)被
重置為0,然后在下一個(gè)const出現(xiàn)之前,每出現(xiàn)一次iota,其所代表的數(shù)字會(huì)自動(dòng)增1。
從以下的例子可以基本理解iota的用法:
const ( // iota被重設(shè)為0 c0 = iota// c0 == 0 c1 = iota// c1 == 1 c2 = iota// c2 == 2 ) const ( a = 1 << iota// a == 1 (iota在每個(gè)const開頭被重設(shè)為0) b = 1 << iota// b == 2 c = 1 << iota// c == 4 ) const ( u = iota * 42 // u == 0 v float64 = iota * 42 // v == 42.0 w = iota * 42// w == 84 ) const x = iota// x == 0 (因?yàn)閕ota又被重設(shè)為0了) const y = iota// y == 0 (同上)? 如果兩個(gè)const的賦值語(yǔ)句的表達(dá)式是一樣的,那么可以省略后一個(gè)賦值表達(dá)式。因此,上面的前兩個(gè)const語(yǔ)句可簡(jiǎn)寫為:
const ( // iota被重設(shè)為0 c0 = iota // c0 == 0 c1 // c1 == 1 c2 // c2 == 2 ) const ( a = 1 <<iota // a == 1 (iota在每個(gè)const開頭被重設(shè)為0) b // b == 2 c // c == 4 )枚舉
? 枚舉指一系列相關(guān)的常量,比如下面關(guān)于一個(gè)星期中每天的定義。通過上一節(jié)的例子,我們看到可以用在const后跟一對(duì)圓括號(hào)的方式定義一組常量,這種定義法在Go語(yǔ)言中通常用于定義枚舉值。Go語(yǔ)言并不支持眾多其他語(yǔ)言明確支持的enum關(guān)鍵字。
const ( Sunday = iota Monday Tuesday Wednesday Thursday Friday Saturday numberOfDays // 這個(gè)常量沒有導(dǎo)出 )? 同Go語(yǔ)言的其他符號(hào)(symbol)一樣,以大寫字母開頭的常量在包外可見。
以上例子中numberOfDays為包內(nèi)私有,其他符號(hào)則可被其他包訪問。
總結(jié)
以上是生活随笔為你收集整理的Go语言编程设计学习Day1:helloworld 变量 常量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《MINECRAFT我的世界 新手完全攻
- 下一篇: [附源码]计算机毕业设计Python+u