GO語言特性
開發者使用程式設計語言的三大分類(執行速度,簡易程度,開發難度)
1.執行速度快、編譯速度慢(編譯型):C,C++
2.執行速度較慢,編譯速度快(解釋型):JAVA,.NET
3.執行速度慢,開發難度小(動态腳本):Python,PHP
GO語言在三個條件做了平衡:易于開發,快速編譯,高效執行
1.helloworld
package main
import "fmt"
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内置變量不要沖突
函數級别:
var msg string = "hello workd"
fmt.Println(msg)
包級别:
var packageVar string = "package Var"
fmt.Println(msg, packageVar)
子塊級别:
{
var blockvar string = "block"
fmt.Println(packageVar,blockvar)
3.go 常量
常量一旦定義後不能修改
常量定義:
①常量
const (
packName string = "package"
packMsg = "pack"
A = "test"
B // 使用前一個常量的值進行初始化 B->A
C // 使用前一個常量的值進行初始化 C->B
D = "test2"
E
F
) //使用前一個常量的值進行初始化
const name string = "abc"
fmt.Println(name, B, C, E, F)
②枚舉
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 資料類型
布爾類型:
isGirl := false
fmt.Println("%T,%#v", isGirl, isGirl)
整數類型:
//int
/int8,int16,int32,int64
常用操作:
1.算數運算符:+,-,*,/,%,++,--
2.關系運算符:>,<,==,!=
3.位運算符:&,|
4.指派運算符:=,+=,-=,*=
浮點數類型:
import (
"fmt"
var height float32 = 1.68
fmt.Printf("%T %#v %f\n", height,height,height)
邏輯運算:
與:左操作數與右操作數為true,結果為true
或:左操作數與右操作數隻要有一個為true,結果為true
非:取反
a, b, c, d =: true, true ,false ,false
fmt.Println("a, b", a && b)
fmt.Println("a, c", a && c)
6.條件語句
①if語句
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
fmt.Print("請輸入:")
switch y {
case "yes", "y":
fmt.Println("輸入的是1")
case "no", "n":
fmt.Println("輸入的是no")
default:
fmt.Println("2222")
7.循環語句for,break,continue
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
用于周遊可疊代對象中的每個元素,例如字元串,數組,切片,映射,通道等
var letters string
letters = "伍俊錡"
for _, k := range letters {
fmt.Printf("%q", k)
針對包含unicode字元的字元串便利,時需要使用for-range,range傳回兩個元素分别為位元組索引和rune字元,可通過空白辨別符忽略需要接受的變量。
類while,死循環
for {
total += index
index ++
if index > 100 {