日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go语言编程设计学习Day1:helloworld 变量 常量

發(fā)布時間:2024/1/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go语言编程设计学习Day1:helloworld 变量 常量 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡單認識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,而類型信息放在變量名之后,示例如下:

var v1 int var v2 string // 數(shù)組 var v3 [10]int // 數(shù)組切片 var v4 []int var v5 struct {f int}// 指針 var v6 *int// map,key為string類型,value為int類型 var v7 map[string]int var v8 func(a int) int

變量聲明語句不需要使用分號作為結(jié)束符。與C語言相比,Go語言摒棄了語句必須以分號作
為語句結(jié)束標記的習慣。

關(guān)鍵字var,而類型信息放在變量名之后,示例如下:

  • var v1 int
  • var v2 string
  • var v3 [10]int
  • // 數(shù)組
  • var v4 []int
  • // 數(shù)組切片
  • var v5 struct {
  • f int
  • }
  • var v6 *int
  • // 指針
  • var v7 map[string]int
  • // map,key為string類型,value為int類型
  • var v8 func(a int) int
  • 變量聲明語句不需要使用分號作為結(jié)束符。與C語言相比,Go語言摒棄了語句必須以分號作
  • 為語句結(jié)束標記的習慣。
  • 變量的使用流程

    在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語法中,變量初始化和變量賦值是兩個不同的概念。下面為聲明一個變量之后的賦值
    過程:

    var v10 int v10 = 123

    ? Go語言的變量賦值與多數(shù)語言一致,但Go語言中提供了C/C++程序員期盼多年的多重賦值功
    能,比如下面這個交換i和j變量的語句:

    i, j = j, i

    ? 在不支持多重賦值的語言中,交互兩個變量的內(nèi)容需要引入一個中間變量:

    t = i; i = j; j = t;

    匿名變量

    ? 在Go中這種情況可以通過結(jié)合使用多重返回和匿名變量來避免定義一些不必要變量的丑陋寫法,讓代碼看起來更加優(yōu)雅。

    ? 假設(shè) GetName()函數(shù)的定義如下,它返回3個值,分別為firstName、 lastName和
    nickName:

    func main(){// var v1 int = 10// var v2 = 10// v3:= 3// fmt.Println(v1,v2,v3);_, _, nickName:= GetName()fmt.Println(nickName); } //若只想獲得nickName,則函數(shù)調(diào)用語句可以用如下方式編寫 func GetName()(firstName,lastName,nickName string){return "may", "chan", "chibi maruko" }

    輸出結(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的常量定義可以限定常量類型,但不是必需的。如果定義常量時沒有指定類型,那么它
    與字面常量一樣,是無類型常量。
    常量定義的右值也可以是一個在編譯期運算的常量表達式,比如

    const mask = 1 << 3

    預定義常量

    ? 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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。