GO語言特性編程
開發者使用編程語言的三大分類(執行速度,簡易程度,開發難度)數組
1.執行速度快、編譯速度慢(編譯型):C,C++編程語言
2.執行速度較慢,編譯速度快(解釋型):JAVA,.NETide
3.執行速度慢,開發難度小(動態腳本):Python,PHP函數
GO語言在三個條件作了平衡:易於開發,快速編譯,高效執行ui
1.helloworld編碼
package mainspa
import "fmt"code
func main {對象
fmt.Println("hello world")
}
注意:
1.若是須要將程序編譯成二進制程序,要將包名寫成main包
第一個Go程序解讀:
1.package
Go源文件開頭必須使用package聲明代碼所屬包,包是Go代碼分發的最基本單位。若程序須要運行,則包名必須爲main。
2.import
import用於導入程序所依賴的全部包,此程序依賴fmt包。
3.func
func用於定義函數,main函數是程序的入口,若程序須要運行必須聲明main函數,main函數無參數也無返回值
4.fmt.Println
調用fmt.Println函數將參數信息打印到控制檯
編譯&運行:
# go build helloworld.go (編譯出helloworld.exe文件)
# go build -o test.exe helloworld.go (test.exe文件)
# go run helloworld.go (編譯並運行helloworld.exe文件)
2.go 變量定義,變量限定適用範圍
變量是指堆一塊存儲空間定義名稱。
變量定義方式:
func main() {
var name string = "kk"//定義了類型也定義了初始值
var zerostring string // 定義變量類型,但不初始值
var typestring = "kk" //定義變量省略類型,不能省略初始值
//短聲明(必須在函數內使用)
shortstring := "kk"
fmt.Println(name,zerostring,typestring,shortstring)
}
變量須要先定義再使用,直接使用會報錯
var name string = "abc"
name = "bca"
批量定義
var (
變量名1 變量類型1 = 值1
變量名2 變量類型2 = 值2
)
變量做用域:
變量查找會從函數內查找,沒有才會去查找函數外的相同變量
子塊能夠覆蓋父塊中使用的變量
變量標識符:
標識符:程序中定義的名字,變量名,常量名字,自定義類型,接口
規範:
1.必須知足:組成只能由非空的unicode編碼字符串,數字,下劃線組成
2.必須知足:必須以unicode編碼的字符串或下劃線開頭(不能以數字開頭)
3.必須知足:不能與go的關鍵字衝突(package,func,var)
建議:
1.Ascill編碼(a-z,A-Z)數字,下劃線
2.變量使用駝峯式
myName
3.與go內置變量不要衝突
函數級別:
func main {
var msg string = "hello workd"
fmt.Println(msg)
}
包級別:
var packageVar string = "package Var"
func main {
var msg string = "hello workd"
fmt.Println(msg, packageVar)
}
子塊級別:
var packageVar string = "package Var"
func main {
var msg string = "hello workd"
{
var blockvar string = "block"
fmt.Println(packageVar,blockvar)
}
fmt.Println(msg, packageVar)
}
}
3.go 常量
常量一旦定義後不能修改
常量定義:
①常量
package main
import "fmt"
const (
packName string = "package"
packMsg = "pack"
A = "test"
B // 使用前一個常量的值進行初始化 B->A
C // 使用前一個常量的值進行初始化 C->B
D = "test2"
E
F
) //使用前一個常量的值進行初始化
func main() {
const name string = "abc"
fmt.Println(name, B, C, E, F)
}
②枚舉
package main
import "fmt"
func main() {
const (
Mon = iota //在常量內使用iota,初始化爲0,每次調用+1
Tuesd
Wed
Thur
Fir
Sat
Sun
)
fmt.Println(Mon)
}
4.go 變量打印
fmt.Printf("%T, %v, %#v", name, name, name)
佔位符
%T:打印變量類型
%v:按某種格式打印變量
%#v:按某種格式打印變量
5.go 數據類型
布爾類型:
package main
import "fmt"
func main() {
isGirl := false
fmt.Println("%T,%#v", isGirl, isGirl)
}
整數類型:
//int
/int8,int16,int32,int64
經常使用操做:
1.算數運算符:+,-,*,/,%,++,--
2.關係運算符:>,<,==,!=
3.位運算符:&,|
4.賦值運算符:=,+=,-=,*=
浮點數類型:
package main
import (
"fmt"
)
func main() {
var height float32 = 1.68
fmt.Printf("%T %#v %f\n", height,height,height)
}
邏輯運算:
與:左操做數與右操做數爲true,結果爲true
或:左操做數與右操做數只要有一個爲true,結果爲true
非:取反
package main
import "fmt"
func main() {
a, b, c, d =: true, true ,false ,false
fmt.Println("a, b", a && b)
fmt.Println("a, c", a && c)
}
6.條件語句
①if語句
package main
import "fmt"
func main() {
var y string
fmt.Print("買西瓜麼:")
fmt.Scan(&y)
fmt.Println("你輸入的是", y)
if y == "yes" {
fmt.Println("買一個西瓜")
}
}
初始化子語句
能夠在if語句中初始化語句塊內的局部變量,多個語句之間使用逗號分隔(;)
if flag := true;flag {
fmt.Println("flag:",flag)
}
②選擇語句switch case
package main
import "fmt"
func main() {
var y string
fmt.Print("請輸入:")
fmt.Scan(&y)
switch y {
case "yes", "y":
fmt.Println("輸入的是1")
case "no", "n":
fmt.Println("輸入的是no")
default:
fmt.Println("2222")
}
}
7.循環語句for,break,continue
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println("1234")
}
var index = 1
for index <= 10 {
if index == 5 {
break
}
if index == 6 {
continue
}
fmt.Println(index)
index++
}
}
for-range
用於遍歷可迭代對象中的每一個元素,例如字符串,數組,切片,映射,通道等
package main
import "fmt"
func main() {
var letters string
letters = "伍俊錡"
for _, k := range letters {
fmt.Printf("%q", k)
}
}
針對包含unicode字符的字符串便利,時須要使用for-range,range返回兩個元素分別爲字節索引和rune字符,可經過空白標識符忽略須要接受的變量。
類while,死循環
func main() {
for {
total += index
index ++
if index > 100 {
break
}
}
}