Go 語言入門
Go 語言簡(jiǎn)介
- Go 使一個(gè)開源的編程語言。
- 從2007年末 有Robert Griesemer,Rob Pike , Ken Thompson 主持開發(fā)。
- 最終2009年11月開源。
- 2012年早些時(shí)候發(fā)布了Go1 穩(wěn)定版本
- 目前Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。
Go 語言特色
- 簡(jiǎn)單、快速、安全
- 并行、有趣、開源
- 內(nèi)存管理、v數(shù)組安全、編譯迅速
第一個(gè)Go程序《Hello world》
// test
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
這個(gè)代碼,是有LiteIDE 自動(dòng)生成的。
運(yùn)行結(jié)果如下:
// test
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
根據(jù)Go Hello World 實(shí)力,分析一下GO語言結(jié)構(gòu)
Go語言的基礎(chǔ)組成有以下幾個(gè)部分:
- 包聲明
- 引入包
- 函數(shù)
- 變量
- 語句 & 表達(dá)式
- 注釋
接下來讓我們來看下簡(jiǎn)單的代碼,該代碼輸出了"Hello World!"
// test
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
詳細(xì)分析一下:
1、第一行代碼 package main 定了包名, 必須在源文件中非注釋的第一行指明這個(gè)文件屬于哪個(gè)包,比如:package main 表示一個(gè)可獨(dú)立執(zhí)行的程序,每一個(gè)Go應(yīng)用程序,都包含一個(gè) main 的包。
2、下一行的 import "fmt" 高速Go編輯器這個(gè)程序要用到fmt 包,fmt包實(shí)現(xiàn)了格式化IO的函數(shù)。
3、下一行 func main() 是程序開始執(zhí)行的函數(shù),main函數(shù)是每一個(gè)可執(zhí)行程序必須包含的,一般來說,都是在啟動(dòng)第一個(gè)執(zhí)行的函數(shù)(如果有init()函數(shù),會(huì)更先執(zhí)行)。
4、fmt.Println(...) 輸出字符串到控制臺(tái),并在最后自動(dòng)增加換行符\n
5、注解 /*.... */。不解釋。
使用命令窗,執(zhí)行Go程序
剛剛的文件保存為 test.go
然后打開命令窗口,運(yùn)行 go run test.go 回車即可。
Go語言基礎(chǔ)語法
** Go 標(biāo)記 **
Go程序可以有多個(gè)標(biāo)記組成,可以使關(guān)鍵字、標(biāo)識(shí)符、常量、字符串、符號(hào)。如下Go語句的6個(gè)標(biāo)記組成。
fmt.Println("Hello,World!")
6個(gè)標(biāo)記是:
1、fmt
2、.
3、Println
4、(
5、"Hello,World!"
6、)
行分隔符
在Go 程序中,一行代表一個(gè)語句結(jié)束,每個(gè)語句不需要像C家族中的其他語言一樣以分毫;結(jié)尾,因?yàn)檫@些工作都由Go編譯器自動(dòng)完成。
如果你打算多個(gè)語句寫在同一行,他們則必須使用;人為區(qū)分,但在實(shí)際開發(fā)中,我們并不鼓勵(lì)這樣的做法。
注釋
注釋不會(huì)被編譯。
// 我是單行注釋
/*
我是多行注釋
*/
標(biāo)識(shí)符
標(biāo)識(shí)符用來命名變量、類型等程序?qū)嶓w。一個(gè)標(biāo)識(shí)符實(shí)際上就是一個(gè)或是多個(gè)字母(AZ和az)數(shù)字(0~9)、下劃線_組成的序列,但是第一個(gè)字符必須是字母或下劃線而不能是數(shù)字。
以下是無效的標(biāo)識(shí)符:
- 1ab(以數(shù)字開頭)
- case(Go 語言的關(guān)鍵字)
- a+b(運(yùn)算符是不允許的)
Go 語言數(shù)據(jù)類型
| 序號(hào) | 類型 | 描述 |
|---|---|---|
| 1 | 布爾型 | 布爾型的值只可以是常量true或則false.例如:var b = true var b bool = true |
| 2 | 數(shù)字類型 | 整形int和浮點(diǎn)型float , Go語言支持整型和浮點(diǎn)數(shù)字,并且原生支持復(fù)數(shù),其中位的運(yùn)輸采用補(bǔ)碼 |
| 3 | 字符串類型 | 字符串就是一串固定長(zhǎng)度的字符鏈接起來的字符序列。Go的字符串是由單個(gè)字節(jié)鏈接起來的。Go語言的字符串的字節(jié)使用UTF-8編碼表示Unicode文本。 |
派生類
| 序號(hào) | 類型 |
|---|---|
| 4 | 指針型(Pointer) |
| 5 | 數(shù)組類型 |
| 6 | 結(jié)構(gòu)化類型(struct) |
| 7 | Channel類型 |
| 8 | 函數(shù)類型 |
| 9 | 切片類型 |
| 10 | 接口類型(interface) |
| 11 | Map類型 |
數(shù)字類型
Go也有基于架構(gòu)的類型,例如:int、uint和uintptr
| 序號(hào) | 類型 | 描述 |
|---|---|---|
| 1 | uint8 | 無符號(hào)8位整型(0~255) |
| 2 | uint16 | 無符號(hào)16位整形(0~65535) |
| 3 | uint32 | 無符號(hào) 32 位整型 (0~4294967295) |
| 4 | uint64 | 無符號(hào) 64 位整型 (0~18446744073709551615) |
| 5 | int8 | 有符號(hào) 8 位整型 (-128~127) |
| 6 | int16 | 有符號(hào) 16 位整型 (-32768~32767) |
| 7 | int32 | 有符號(hào) 32 位整型 (-2147483648~2147483647) |
| 8 | int64 | 有符號(hào) 64 位整型 (-9223372036854775808~9223372036854775807) |
浮點(diǎn)型
| 序號(hào) | 類型 | 描述 |
|---|---|---|
| 1 | float32 | IEEE-754 32位浮點(diǎn)型數(shù) |
| 2 | float64 | IEEE-754 64位浮點(diǎn)型數(shù) |
| 3 | complex64 | 32 位實(shí)數(shù)和虛數(shù) |
| 4 | complex128 | 64 位實(shí)數(shù)和虛數(shù) |
其他數(shù)字類型
| 序號(hào) | 類型 | 描述 |
|---|---|---|
| 1 | byte | 類似uint8 |
| 2 | rune | 類似int32 |
| 3 | uint | 32或64位 |
| 4 | int | 與uint一樣大小 |
| 5 | uintptr | 無符號(hào)整形,用于存放一個(gè)指針 |
go語言變量
變量來源于數(shù)學(xué),是計(jì)算機(jī)語言中能存儲(chǔ)計(jì)算結(jié)果或能表示值抽象概念,變量可以通過變量名訪問。
Go語言變量名由字母、數(shù)字、下劃線組成,其中首歌字幕不能為數(shù)字。
聲明變量的一般形式是使用var關(guān)鍵字:
var identifier type
變量聲明
第一種,指定變量類型,聲明后若不賦值,使用默認(rèn)值。
var v_name v_type
v_name = value
第二種,根據(jù)值自行判斷變量類型
var v_name = value
第三種,省略var,注意 := 左側(cè)的變量不應(yīng)該是已經(jīng)經(jīng)過聲明的,否則或?qū)е戮幾g錯(cuò)誤。
v_name := value
//例如
var a int =10
var b = 10
c :=10
實(shí)例如下:
package main
var a = "測(cè)試字符串"
var b string = "aweiblog.top"
var c bool //默認(rèn)false
func main(){
println(a,b,c)
}
多變量聲明
//類型相同多個(gè)變量,非全局變量
var vname1,vname2 , vname3 type
vname1, vname2 , vname3 = v1,v2,v3
var vname1, vname2,vname3 = v1, v2, v3 //和python很想,不需要顯示聲明類型,自動(dòng)推斷
vname1, vname2,vname3 := v1,v2,v3 //出現(xiàn)在:=左側(cè)的變量不應(yīng)該是已經(jīng)被聲明的,否則會(huì)導(dǎo)致編譯錯(cuò)誤。
//這種因式分解關(guān)鍵字的寫法一般用語聲明全局變量,注意這里是 () , 而不是 {}
var (
vname1 v_type1
vname2 v_type2
)
實(shí)實(shí)例如下:
package main
var x,y int
var(
a int
b bool
)
var c,d int = 1,2
var e,f = 123, "hello"
//這種不帶聲明格式的職能在函數(shù)體中出現(xiàn)
//g,h := 123, "hello"
func main(){
g,h:=123, "hello"
println(x,y,a,b,c,d,e,f,g,h)
}