Golang基礎(chǔ)語(yǔ)法

一逼裆,變量和常量

1稽物,變量的聲明
聲明格式:  var  變量名  變量類型
var name string
name = "小明"
fmt.Println(name)

批量聲明:

var age,height int8  //變量類型相同
age = 18
height = 170   //constant 170 overflows int8

var (    //類型變量不同
        a string
        b int
        c bool
        d float32
    )

聲明并賦值:

hobby := "打籃球"

程序自動(dòng)判斷:

var teacher = "李小龍"
var name,age = "小李" , 18

注意事項(xiàng):

  1. 變量聲明的時(shí)候會(huì)在變量對(duì)應(yīng)的內(nèi)存區(qū)域進(jìn)行初始化操作,每個(gè)變量會(huì)生成該變量所屬類型的一個(gè)初始默認(rèn)值,例如:整形和浮點(diǎn)型:0农渊;字符串:空字符串;布爾類型默認(rèn)值為:false或颊;切片砸紊,函數(shù)传于,指針變量默認(rèn)為nil
  2. 變量聲明之后要使用,如果不使用則會(huì)報(bào)錯(cuò)
  3. 字符串可用雙引號(hào) " " 醉顽,或者 反引號(hào) ` ` 表示沼溜,不可以用單引號(hào)。但是反引號(hào)不支持轉(zhuǎn)義(例如\n轉(zhuǎn)義為換行)游添,而是直接輸出 \n
  4. 在函數(shù)的外部系草,聲明變量必須用 var 關(guān)鍵字,而不能用 := 的方法聲明
2唆涝,匿名變量(anonymous variable)
  • 匿名變量不占用命名空間找都,不分配內(nèi)存,所有匿名變量不存在重復(fù)聲明
  • 我們常用匿名變量石抡,表示要忽略掉(不使用)該變量
  • 我們只執(zhí)行包的初始化檐嚣,但是不使用包,也應(yīng)用到匿名變量
func foo() (int, string) {
    return 10, "Q1mi"
}
func main() {
    x, _ := foo()
    _, y := foo()
    fmt.Println("x=", x)
    fmt.Println("y=", y)
}
3啰扛,常量

常量定義之后嚎京,在整個(gè)程序的運(yùn)行中,都保持不變隐解。常量的定義與變量類似鞍帝,只是把 var 關(guān)鍵字換成 const 關(guān)鍵字 就可以了

const pi = 3.1415
const e = 2.7182

二,打印輸出

golang的打印輸出依賴:fmt包 import ("fmt" )

  • fmt.Println() 打印并換行
  • fmt.Printf() 格式化輸出
  • 查看變量類型用reflect.TypeOf()
type Cat struct{
    length int8
    color string
    skill string
}

kitty := Cat{
    length  : 5,
    color   : "orange",
    skill   : "catch mouse",
}
fmt.Println(kitty)        // {5 orange catch mouse}
fmt.Printf("kitty是:%v \n",kitty)   // %v是默認(rèn)的占位符:kitty是:{5 orange catch mouse}
fmt.Printf("kitty是:%+v \n",kitty)  // %+v會(huì)打印鍵值對(duì): kitty是:{length:5 color:orange skill:catch mouse}
fmt.Printf("kitty是:%#v \n",kitty)  // %#v會(huì)打印類型+鍵值對(duì): kitty是:main.Cat{length:5, color:"orange", skill:"catch mouse"}

var teacher = "李小龍"
fmt.Println(reflect.TypeOf(teacher)) // string  查看變量類型
fmt.Println(reflect.TypeOf(kitty))  //查看變量類型:main.Cat

參考文章:https://studygolang.com/articles/20310

1煞茫,通用占位符:
v     值的默認(rèn)格式帕涌。
%s    輸出字符串表示(string類型或[]byte) 
%+v   添加字段名(如結(jié)構(gòu)體)
%%    字面上的百分號(hào),并非值的占位符
2续徽,整數(shù)占位符:
%b    二進(jìn)制表示
%d    十進(jìn)制表示
%x    十六進(jìn)制表示
3蚓曼,浮點(diǎn)數(shù)及復(fù)數(shù):
%b 無(wú)小數(shù)部分的,指數(shù)為二的冪的科學(xué)計(jì)數(shù)法钦扭,與 strconv.FormatFloat中的 'b' 轉(zhuǎn)換格式一致纫版。例如 -123456p-78
%f 有小數(shù)點(diǎn)而無(wú)指數(shù),例如 123.456
4客情,指針:
%p 十六進(jìn)制表示其弊,前綴 0x
fmt.Printf("%p \n",&kitty)   // 0xc000070330

三,命令行

  • 在命令行執(zhí)行: go 會(huì)列出所有命令
  • 在命令號(hào)執(zhí)行:go help + 命令 可以獲得幫助
    常用命令有:

go version 查看版本
go env用于打印Go語(yǔ)言的環(huán)境信息膀斋。
go run命令可以編譯并運(yùn)行命令源碼文件梭伐。
go get可以根據(jù)要求和實(shí)際情況從互聯(lián)網(wǎng)上下載或更新指定的代碼包及其依賴包,并對(duì)它們進(jìn)行編譯和安裝仰担。
go build命令用于編譯我們指定的源碼文件或代碼包以及它們的依賴包糊识。
go install用于編譯并安裝指定的代碼包及它們的依賴包。
go clean命令會(huì)刪除掉執(zhí)行其它命令時(shí)產(chǎn)生的一些文件和目錄。
go doc命令可以打印附于Go語(yǔ)言程序?qū)嶓w上的文檔技掏。我們可以通過(guò)把程序?qū)嶓w的標(biāo)識(shí)符作為該命令的參數(shù)來(lái)達(dá)到查看其文檔的目的铃将。
go test命令用于對(duì)Go語(yǔ)言編寫的程序進(jìn)行測(cè)試。
go list命令的作用是列出指定的代碼包的信息哑梳。
go fix會(huì)把指定代碼包的所有Go語(yǔ)言源碼文件中的舊版本代碼修正為新版本的代碼。
go vet是一個(gè)用于檢查Go語(yǔ)言源碼中靜態(tài)錯(cuò)誤的簡(jiǎn)單工具绘盟。
go tool pprof命令來(lái)交互式的訪問(wèn)概要文件的內(nèi)容鸠真。

三,變量的復(fù)制龄毡,引用吠卷,指針變量

&符號(hào)在go中是取內(nèi)存地址的意思, &a就是獲取變量a的內(nèi)存地址

1沦零,變量的賦值是值傳遞

var age int8 = 18
fmt.Println(age) // 18
fmt.Println(&age) // 0xc0000120a0

var age1 int8 = age
fmt.Println(age1) // 18
fmt.Println(&age1) // 0xc0000120b6 可以發(fā)現(xiàn)age與age1的地址空間并不相同

2祭隔,指針

var age int = 18
fmt.Println(&age) // 0xc0000120a0

var agePoint *int  //解析:agePoint 是一個(gè)指針變量,int是指該指針變量的類型路操,*表示該變量(agePoint)是一個(gè)指針變量 
fmt.Println(agePoint) // nil,當(dāng)一個(gè)指針被定義后沒(méi)有分配到任何變量時(shí)疾渴,它的值為 nil。

//*agePoint = 1 //報(bào)錯(cuò)屯仗,原因:我們定義一個(gè)指針(agePoint)搞坝,指針?lè)峙淞说刂罚ㄖ羔樀刂罚侵羔樦赶虻闹担?agePoint)還沒(méi)有分配到地址
//fmt.Println(*agePoint) //報(bào)錯(cuò)魁袜,原因:與上相同桩撮,只分配了指針地址,還沒(méi)分配 值 地址

agePoint = &age
fmt.Println(*agePoint) // 18
fmt.Println(agePoint) // 0xc0000120a0  可見峰弹,與age變量的內(nèi)存地址是一樣的

*agePoint = 29
fmt.Println(age) // 29 可見店量,改變 *agePoint,age也會(huì)一同改變

上面代碼中:

  • var age 是一個(gè)int類型的值鞠呈,而 var agePoint 是一個(gè)指針
  • *agePoint 是一個(gè)值
  • &可以取到某個(gè)變量的內(nèi)存地址融师,這個(gè)內(nèi)存地址可以賦值給一個(gè)指針變量
  • 改變 *agePoint,age也會(huì)一同改變粟按,因?yàn)檫@兩個(gè)變量的值诬滩,存放在:相同的內(nèi)存地址
3,接收指針的函數(shù)
func main()  {
    var myAge int8 = 18
    var yourAge int8 = 28

    changeEachOther(&myAge,&yourAge)
    fmt.Println(myAge)   // 28
    fmt.Println(yourAge) // 18
}

//交換兩個(gè)變量的值
func changeEachOther(x *int8,y *int8) {
    fmt.Println(x) // x是一個(gè)內(nèi)存地址灭将,0xc0000120a0疼鸟,其實(shí) x 就是 &myAge
    fmt.Println(*x) // *x是&myAge內(nèi)存地址里面的值,18

    var temp int8 = *x
    *x = *y
    *y = temp
}

4庙曙,傳值與傳引用

四吴攒,內(nèi)置類型和函數(shù):

1张抄,內(nèi)置類型--值類型:
bool
int(32 or 64), int8, int16, int32, int64
uint(32 or 64), uint8(byte), uint16, uint32, uint64
float32, float64
string
complex64, complex128
array    -- 固定長(zhǎng)度的數(shù)組
2,引用類型(指針類型)
slice   -- 序列數(shù)組(最常用)
map     -- 映射
chan    -- 管道
3洼怔,內(nèi)置函數(shù)

Go 語(yǔ)言擁有一些不需要進(jìn)行導(dǎo)入操作就可以使用的內(nèi)置函數(shù)署惯。它們有時(shí)可以針對(duì)不同的類型進(jìn)行操作,例如:len镣隶、cap 和 append极谊,或必須用于系統(tǒng)級(jí)的操作,例如:panic安岂。因此轻猖,它們需要直接獲得編譯器的支持。

    append          -- 用來(lái)追加元素到數(shù)組域那、slice中,返回修改后的數(shù)組咙边、slice
    close           -- 主要用來(lái)關(guān)閉channel
    delete          -- 從map中刪除key對(duì)應(yīng)的value
    panic           -- 停止常規(guī)的goroutine  (panic和recover:用來(lái)做錯(cuò)誤處理)
    recover         -- 允許程序定義goroutine的panic動(dòng)作
    real            -- 返回complex的實(shí)部   (complex、real imag:用于創(chuàng)建和操作復(fù)數(shù))
    imag            -- 返回complex的虛部
    make            -- 用來(lái)分配內(nèi)存次员,返回Type本身(只能應(yīng)用于slice, map, channel)
    new                -- 用來(lái)分配內(nèi)存败许,主要用來(lái)分配值類型,比如int翠肘、struct檐束。返回指向Type的指針
    cap                -- capacity是容量的意思,用于返回某個(gè)類型的最大容量(只能用于切片和 map)
    copy            -- 用于復(fù)制和連接slice束倍,返回復(fù)制的數(shù)目
    len                -- 來(lái)求長(zhǎng)度被丧,比如string、array绪妹、slice甥桂、map、channel 邮旷,返回長(zhǎng)度
    print黄选、println     -- 底層打印函數(shù),在部署環(huán)境中建議使用 fmt 包
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末婶肩,一起剝皮案震驚了整個(gè)濱河市办陷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌律歼,老刑警劉巖民镜,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異险毁,居然都是意外死亡制圈,警方通過(guò)查閱死者的電腦和手機(jī)们童,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鲸鹦,“玉大人慧库,你說(shuō)我怎么就攤上這事〔鍪龋” “怎么了齐板?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)葛菇。 經(jīng)常有香客問(wèn)我覆积,道長(zhǎng),這世上最難降的妖魔是什么熟呛? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮尉姨,結(jié)果婚禮上庵朝,老公的妹妹穿的比我還像新娘。我一直安慰自己又厉,他們只是感情好九府,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著覆致,像睡著了一般侄旬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上煌妈,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天儡羔,我揣著相機(jī)與錄音,去河邊找鬼璧诵。 笑死汰蜘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的之宿。 我是一名探鬼主播族操,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼比被!你這毒婦竟也來(lái)了色难?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤等缀,失蹤者是張志新(化名)和其女友劉穎枷莉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體项滑,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡依沮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年涯贞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片危喉。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宋渔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辜限,到底是詐尸還是另有隱情皇拣,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布薄嫡,位于F島的核電站氧急,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏毫深。R本人自食惡果不足惜吩坝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哑蔫。 院中可真熱鬧钉寝,春花似錦、人聲如沸闸迷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)腥沽。三九已至逮走,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間今阳,已是汗流浹背师溅。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酣栈,地道東北人险胰。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像矿筝,于是被迫代替她去往敵國(guó)和親起便。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容