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