**
快速入門GO語言之Lesson00-基礎語法
**
一、基本常識
1、go語言只有一個入口函數main,一個文件夾代表一個工程,每個工程只能有一個main
2、打印,Println()會自動換行
3、調用函數,大部分都需要導入包
4、go語言以包作爲管理單位,每個文件必須先聲明包
5、程序必須要一個main包
6、go語言每一行的結尾沒有“;”結尾
二、cmd命令
1、go build xxx.go //編譯go代碼,生成一個可執行程序,運行可執行程序xxx.exe
2、cls 清屏命令
3、go run xxx.go //不生成可執行文件,直接編譯運行
三、數據類型
1、數據類型的作用:告訴編譯器變量應該以多大的內存存儲
2、變量命名規範:
a、字母,數字,下劃線
b、不能以數字開頭
c、名字不能是關鍵字
d、大小寫區分
四、變量聲明
1、聲明格式:var 變量名 數據類型 //聲明的變量必須使用
2、沒有初始化的變量,默認值爲0
3、同一個函數內的變量聲明唯一,可以同時聲明多個同一類型的變量
4、自動推導類型,必須初始化通過初始化的值確定類型
五、練習代碼塊(1)
package main
import "fmt"
func main() { //左括號必須和函數放在同一行
fmt.Println("Hello World!")
var a int
a = 10
fmt.Println("a= ", a)
var b int = 20
fmt.Println("b= ", b)
//自動推導類型
c := 30
fmt.Printf("c type is %T\n", c) //%T打印變量的數據類型
e, f := 10, 20
//傳統的方式交換兩個變量的值
var temp int
temp = e
e = f
f = temp
//go語言交換兩個變量的值
i, j := 10, 20
i, j = j, i
fmt.Printf("i = %d,j = %d\n", i, j)
//匿名變量,丟棄數據不處理
//匿名變量配合函數返回值使用纔有意義
temp, _ = e, f
fmt.Printf("temp= %d", temp)
}
// 運行結果
// Hello World!
// a= 10
// b= 20
// c type is int
// i = 20,j = 10
六、練習代碼塊(2)
package main
import "fmt"
func main() {
//常量的使用
//常量:程序運行區間,不可以改變的量 關鍵字const
//變量:程序運行區間,可以改變的量
const a int = 10
//a = 20 報錯:常量不可修改
const b = 10 //沒有":="
fmt.Printf("b type is %T\n", b)
//多個變量或常量的定義
//不同類型變量的聲明(定義)
var c int
var d float64
c, d = 10, 3.1415926
fmt.Printf("c = %d,d = %f \n", c, d)
//ctrl+/ 註釋和取消註釋快捷鍵
//const i int = 10
//const j float64 = 3.1415926
const (
i = 10
j = 3.1415926
)
fmt.Printf("i = %d,j = %v\n", i, j)
}
// 運行結果
// b type is int
// c = 10,d = 3.141593
// i = 10,j = 3.1415926
七、練習代碼塊(3)
package main
import "fmt"
func main() {
//iota常量自動生成器,每個一行,自動累加一
//iota給常量賦值使用
const (
a = iota //0
b = iota //1
c = iota //2
)
fmt.Printf("a= %d,b= %d,c= %d\n", a, b, c)
//iota遇到const重置爲0
const d = iota
fmt.Printf("d = %d\n", d)
//可以只寫一個iota
const (
a1 = iota //0
b1 //1
c1 //2
)
fmt.Printf("a1= %d,b1= %d,c1= %d\n", a1, b1, c1)
//如果是同一行,值都一樣
const (
i = iota
j1, j2, j3 = iota, iota, iota
k = iota
)
fmt.Printf("i = %d,j1 = %d,j2 = %d,j3 = %d,k = %d\n", i, j1, j2, j3, k)
}
//運行結果
//a= 0,b= 1,c= 2
//d = 0
//a1= 0,b1= 1,c1= 2
//i = 0,j1 = 1,j2 = 1,j3 = 1,k = 2
八、練習代碼塊(4)
package main
import "fmt"
func main() {
//bool類型
//1、聲明變量
var a bool
a = true
fmt.Println("a = ", a)
//2、自動推導
b := false
fmt.Println("b = ", b)
//浮點型
//1、聲明變量
var f1 float32
f1 = 3.1415926
fmt.Println("f1 = ", f1)
var f2 float64
f2 = 3.1415926
fmt.Println("f2 = ", f2)
//字符類型
var ch byte
ch = 97
fmt.Printf("%c = %d\n", ch, ch) //格式化輸出,%c以字符串方式打印,%d以整型方式打印
//大小寫轉化,加減32
fmt.Printf("大寫:%d,小寫:%d\n", 'A', 'a')
fmt.Printf("大寫轉小寫:%c\n", 'A'+32)
fmt.Printf("小寫轉大寫:%c\n", 'a'-32)
//字符串類型
var str string
str = "abc"
fmt.Println("str = ", str)
//自動推導類型
str2 := "mike"
fmt.Println("str2 = ", str2)
//內建函數,len()返回字符串長度
fmt.Println("str2 的長度: ", len(str2))
//字符與字符串的區別,字符串都是隱藏了一個結束符
//只有一個字符,轉義字符除外
//一個或多個字符組成
var str3 string
str3 = "hello,world"
fmt.Printf("str3 = %c%c%c%c%c\n", str3[0], str3[1], str3[2], str3[3], str3[4])
//複數類型
var t complex128
t = 2.1 + 3.14i
fmt.Println("t = ", t)
//自動推導類型
t2 := 3.3 + 2.2i
fmt.Println("t2 = ", t2)
//通過內建函數,取實部和虛部
fmt.Println("real(t2) = ", real(t2), "imag(t2) = ", imag(t2))
}
//運行結果
// a = true
// b = false
// f1 = 3.1415925
// f2 = 3.1415926
// a = 97
// 大寫:65,小寫:97
// 大寫轉小寫:a
// 小寫轉大寫:A
// str = abc
// str2 = mike
// str2 的長度: 4
// str3 = hello
// t = (2.1+3.14i)
// t2 = (3.3+2.2i)
// real(t2) = 3.3 imag(t2) = 2.2
九、練習代碼塊(5)
package main
import "fmt"
func main() {
//類型轉換
var flag bool
flag = true
//bool類型不能轉換爲int,int 不能轉換爲bool,這種不能轉換類型成爲不兼容類型
fmt.Printf("flag = %T\n", flag)
var ch byte
ch = 'a'
var t int
t = int(ch)
fmt.Printf("t = %d\n", t)
//類型別名 type
type bigint int64 //給int64起別名爲bigint
var a bigint
fmt.Printf("a type is %T\n", a)
type (
long int64
char byte
)
var b long
b = 11
var ch1 char
ch1 = 'e'
fmt.Printf("b = %d,ch1 = %c\n", b, ch1)
}
//運行結果
// flag = bool
// t = 97
// a type is main.bigint
// b = 11,ch1 = e