參考文獻
開發環境:vscode配套裝完
go版本: go version go1.14.4 windows/amd64
package main
import( "fmt")
func main()
以上是go語法基礎結構,也是第乙個**。
注意:go常用只能用雙引號,單引號初學階段可以直接放棄記憶,當他不存在,後續強大了自己查原因。
定義變數
// 方式1
var test string;
// 方式2
test2 := "will be string type!"
test3, test4 := "test3", "test4"
// 方式3
var test3, test4 string
注意:go中未使用的變數不允許定義
資料型別以及定義序號
型別和描述
1布林型 布林型的值只可以是常量 true 或者 false。乙個簡單的例子:var b bool = true。
2數字型別整型 int 和浮點型 float32、float64,go 語言支援整型和浮點型數字,並且支援複數,其中位的運算採用補碼。
3字串型別,字串就是一串固定長度的字元連線起來的字串行。go 的字串是由單個位元組連線起來的。go 語言的字串的位元組使用 utf-8 編碼標識 unicode 文字。
4派生型別:包括:
(a) 指標型別(pointer)
(b) 陣列型別
(d) channel 型別
(e) 函式型別
(f) 切片型別
(g) 介面型別(inte***ce)
(h) map 型別
// 定義數字
var int_1 int
int_1 = 1
fmt.println(int_1)
int_2 := 2
fmt.println(int_2)
var int_8 int8
int_8 = 127 // 2^8-1=127
fmt.println(int_8)
var int_16 int16
int_16 = 111
fmt.println(int_16)
// 定義字串
var string_1 string
string_1 = "**** trump"
string_2 := "**** trump fmy"
fmt.println(string_1, string_2)
string_3 := `
mutil line
`// 定義陣列
var balance = [...] float32
fmt.println(balance)
var balance2=[...]int
fmt.println(balance2)
balance2[0]= 1000000000000
fmt.println(balance2)
// 列印陣列長度
fmt.println(len(balance2))
// channel 通道型別
chan_var := make(chan int)
go func() ()
chan_2 := <- chan_var
fmt.println(chan_var)
fmt.println(chan_2)
// 切片型別
var slince_1 string
fmt.println(slince_1)
len := 10
var slice1 string = make(string, len)
//也可以簡寫為
slice2 := make(string, len)
fmt.println(slice1, slice2)
for迴圈的兩種方式
channel通道型別詳解var balance2=[...]int
,fmt.println(balance2)
balance2[0]= 1000000000000
fmt.println(balance2)
for i:=0;i其中由於go未經使用的變數不允許定義,故使用range時,會返回兩個變數,這裡定義為key和value,而key我並沒有用到,故要使用佔位符_
_
代表賦值但不使用,相對賦值給乙個佔位而已。值得注意的是range可以應用於陣列,切片,map等型別中。
結構體型別
結構體型別大致可以彌補類模式缺少的情況,可以組建乙個結構體當做類來使用,也具備初始化和賦值方式。
package main
import "fmt"
type struct_book struct
func main()
通道型別作用於幾個協程中都有使用的變數的傳遞,防止協程中乙個變數值和另乙個協程使用不一致。
// 建立通道變數,使用切片建立+chan關鍵字
chan_var := make(chan int)
go func() ()
// 由於通道變數是引用傳遞,即變數儲存的是記憶體位址,故要將通道變數賦值出來給新的變數
chan_2 := <- chan_var
fmt.println(chan_var)
fmt.println(chan_2)
go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片(「動態陣列」),與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。
切片型別會常常用到,故這裡作詳細說明。
指標型別指向乙個記憶體位址,用引用,傳遞引用等。指標型別不能之前賦值乙個實際的值,可以交換記憶體位址。
var ptr_1 * int
string_4 := 100;
ptr_1 = &string_4
fmt.println(ptr_1)
go並沒有異常捕捉機制,錯誤只能手動返回和處理,且需要使用介面型別:error 的struct,改介面屬於底層,直接使用即可。
demo ** 菜鳥教程
// 定義乙個 divideerror 結構
type divideerror struct
// 實現 `error` 介面
func (de *divideerror) error() string
// 定義 `int` 型別除法運算的函式
func divide(vardividee int, vardivider int) (result int, errormsg string)
errormsg = ddata.error()
return
} else
}func main()
}
1.菜鳥教程go教程
2.go error處理
go語法之一
go語法 go語言要求public的變數必須以大寫字母開頭,private變數則以小寫字母開頭,這種做法不僅免除了public private關鍵字,更重要的是統一了命名風格。go語言對進行了強制,必須如下寫法 if expression 下面的寫法是錯誤的 if expression go 的花括...
go語法之一
go語法 go語言要求public的變數必須以大寫字母開頭,private變數則以小寫字母開頭,這種做法不僅免除了public private關鍵字,更重要的是統一了命名風格。go語言對進行了強制,必須如下寫法 if expression 下面的寫法是錯誤的 if expression go 的花括...
GO語言基礎語法
語言變數 go語言的語言符號又稱記法元素,共包括5類,標籤符 identifier 關鍵字 keyword 操作符 operator 分隔符 delimiter 字面量 literal 它們是組成go語言 和程式的最基本單位。go語言的所有源 都必須由 unicode 編碼規範的 utf 8 編碼格...