GO語言
DAY 1
Cent OS7 安裝GO環(huán)境
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install -y golang
驗證
go -version
Go is a tool for managing Go source code.
Usage:
go <command> [arguments]
The commands are:
bug? ? ? ? start a bug report
build? ? ? compile packages and dependencies
clean? ? ? remove object files and cached files
doc? ? ? ? show documentation for package or symbol
env? ? ? ? print Go environment information
fix? ? ? ? update packages to use new APIs
fmt? ? ? ? gofmt (reformat) package sources
generate? ? generate Go files by processing source
get? ? ? ? add dependencies to current module and install them
install? ? compile and install packages and dependencies
list? ? ? ? list packages or modules
https://blog.csdn.net/li_xue_zhao/article/details/79818390 ZSH OH-MY-ZSH
https://blog.csdn.net/boling_cavalry/article/details/88598828 VIM-GO設置GO語法在VIM中高亮
編寫hello
package main
//1.go以包作為管理單位
//2.每個文件必須先聲明包
//3.程序必須有一個main包
import "fmt"? //導入包后必須要使用
//起始花括號必須跟在main后,不能另起一行
//同理花括號必須跟函數(shù)名同行
func main() {
fmt.Println("Hello GO")//Println P必須為大寫,且Println()會自動換行
//結束花括號可以跟在語句后
}
go build xxx.go 編譯go代碼,生成一個可執(zhí)行文件
go run xxx.go 執(zhí)行GO代碼,不生成文件
數(shù)據(jù)類型
作用:告訴編譯器這個變量(值)應該以多大的內存存儲
類型(同一類的數(shù)據(jù))
變量命名規(guī)則:字母,下劃線,數(shù)字
不能以數(shù)字開頭
名字不能是關鍵字(break var go等等)
區(qū)分大小寫
變量:程序運行期間可以改變的量
? 聲明 var XX(變量名) int(類型) //變量聲明完后必須使用
? 同一個{}里,聲明的變量名是唯一的
? 可以同時什么多個變量
? package main
? import "fmt"
? func main() {
? var a string
? //var a int
? a="test"
? //a=10 a如果不賦值直接打印,返回0
? fmt.Println(a)
? //fmt.Println("a = ", a)
}
? #返回結果test // a = 10
? package main
? import "fmt"
? func main() {
var a int
a=10
fmt.Println("a = ",a)
a*=2 //重新賦值
fmt.Println("a=",a)
}
? #返回$ go run var1.go
? a =? 10
? a= 20
? 變量初始化:在聲明變量的同時進行賦值
? var b int = 10 //初始化
? b = 20 //賦值
? 自動推導類型,必須初始化,通過初始化的值確定類型(常用寫法)
? c := 30 //這種寫法不用聲明變量,先聲明b的類型,再給b賦值
? fmt.Printf("c type is %T\n", c)//%T變量所屬類型,Printf中才可以使用占位符,Println中不行,占位符在""中識別為純文本
? eg:Printf和Println的區(qū)別
package main
import "fmt"
func main() {
a:=10
fmt.Println("a =",a)
fmt.Printf("a = %d\n",a)
b,c:=20,30
fmt.Println("b =",b,"c =",c)
fmt.Printf("b = %d,c = %d\n",b,c)
}
? #返回a = 10
? a = 10
? b = 20 c = 30
? b = 20,c = 30 //注意各行的空格,保持返回值美觀
多重賦值和匿名變量
a,b,c:=10,20,30 //多重賦值
交換a b的值
var tmp int
tmp = a
a = b
b = tmp
fmt.Printf("a = %d,b = %d\n",a,b)
go寫法
i,j := 10,20
i,j = j, i
fmt.Printf("i = %d,j = %d\n",i,j)
#返回i = 20,j = 10
匿名變量
i,j = 10,20
tmp,_ = i,j // _ 匿名變量,丟棄數(shù)據(jù)不處理,配合函數(shù)返回值使用才有優(yōu)勢
fmt.Println("tmp =",tmp)
eg:
package main
import "fmt"
func test() (a,b,c int){
return 1, 2, 3
}
func main(){
var c,d,e int
c,d,e = test() //return 1,2,3
fmt.Printf("c = %d, d = %d, e = %d\n",c,d,e)
}
#返回c = 1, d = 2, e = 3
#搭配匿名變量,只返回d的值
func main(){
var c,d,e int
_,d,_ = test()
fmt.Printf("d = %d\n",d) //如果仍輸出c = %d e = %d c,e 會設置值為0
}
#返回c = 0, d = 2, e = 0
常量的定義
運行期間不可以改變
使用const聲明
func main(){
const a int = 10
const b = 10 //自動推導類型,常量不用使用:=
}
多個變量或者常量的定義
定義多個變量時的自動推導不用寫:
eg:
package main
import "fmt"
func main(){
const(
i int = 20? // i = 20
j float64 = 6.28 //j = 6.28 可以自動推導類型
)
var (
a int =10? //a = 10
b float64 = 3.14 //b = 3.14 可以自動推導類型
)
fmt.Println("i =",i,"j =",j)
fmt.Printf("j type is %T\n",j)
fmt.Printf("a =%d,b =%f\n",a,b)? //float占位符為%F
fmt.Printf("b type is %T\n",b)
}
#返回i = 20 j = 6.28? //Println返回不補0
j type is float64
a =10,b =3.140000 //Printf返回補0
b type is float64