go語言的詞法元素分為5類:識別符號、關鍵字、操作符、分隔符、字面量。
注意:
1.和c語言不同的是go語言中不需要顯示地插入分號,在必要時,go語言會自動為**插入分號以進行語句分隔。
2.go語言源**必須由unicode編碼規範的utf-8編碼格式進行編碼。
識別符號是由若干個字母、下劃線和數字組成的字串行;該字串行的第乙個字母必須為字母。
go語言的預定義識別符號:
go語言中有乙個空識別符號,它由乙個下劃線表示。作用是:用於乙個不需要引入乙個新繫結的宣告中。例如,當我們只想執行一下某個**包中的初始化函式,而不需要使用這個**包中的任何程式實體的時候,就寫如下匯入語句:import _ 「runtime/cgo」"runtime/cgo"是乙個標準**包的識別符號。
關鍵字,是被程式語言保留而不讓程式設計人員作為識別符號使用的字串行。
類別關鍵字
程式宣告
import,package
程式實體宣告和定義
chan, const, func, inte***ce, map, struct, type, var
程式控制流程
go, select, break, case, continue, default, defer, else, fallthrough, for, goto, if, range, return, switch
在go語言中,程式實體的宣告和定義是建立在其資料型別的體系之上的。例如關鍵字chan、func、inte***ce、map、struct,分別於go語言的復合資料型別channel(通道)、function(函式)、inte***ce(介面)、map(字典)、和struct(結構體)相對應。go語言**中用到的字面量有以下3類:程式控制流程的關鍵字,一共有15個。其中go和select,這兩個主要用於go語言併發程式設計。
1.表示基礎資料型別的各種字面量。如,浮點數型別值12e-3
2.構造各種自定義的符合資料型別的型別字面量。
type person struct
name,age,address是型別字面量
3.表示復合資料型別的值的復合字面量。如:
person
注意:go語言中不允許在乙個類中的復合字面量中,出現重複的鍵。如下都是錯誤,無法通過編譯。從字面量分為基本型別和復合型別。//表示結構體型別值,有重複的鍵 name
person
//表示字典型別值,有重複的鍵 age
map[
string
]string
//表示切片型別值,有重複的鍵 0
string
byte 等同於uint8,佔乙個位元組8位復合型別:int 依賴於不同平台下的實現,可以是int32或者int64
int8
int 16
int 32
int 64
rune 等同於int32
uint
uint8
uint16
uint32
uint 64
uintptr
channel(通道)每乙個型別都有潛在型別。基礎型別的潛在型別是其本身,如string的潛在型別是string型別。function(函式)
inte***ce(介面)
map(字典)
struct(結構體)
slice(切片)
array(陣列)
pointer(指標)
我們也可以自定義乙個型別,這個自定義型別的本身就是宣告中的基礎型別。
如:
type mystring stringmystring就是string的乙個別名型別,潛在型別就是string.go語言中的rune型別就是uint32的乙個型別別名,其潛在型別就是uint32.
注意:且潛在型別具有傳遞性。如:
type isstring mystring則型別isstring的潛在型別就是string.
這裡宣告乙個型別,如下:
type mystring [3]string[3]string是乙個陣列型別,但是它並不是mystring的潛在型別,而潛在型別應該是string .
因為go語言規定,陣列型別的潛在型別決定了該型別變數中存放那一型別的變數。
go語言的操作符和c語言類似。go語言一共有21個操作符,包括算術操作符、比較操作符、邏輯操作符、位址操作符、接收操作符。
重點說一下不同的地方:就是接收操作符。
<-
接收操作符
<-ch
<- 接收操作符,只作用於通道型別的值。使用時,需要注意兩點:
(1)從乙個通道型別的空值(即nil)接收值的表示式將會永遠被阻塞。
(2)從乙個已被關閉的通道型別值接收值會永遠成功並返回乙個其元素型別的零值。
v1 := <- chv2 =<- ch
特殊標記 = 用於將乙個值賦給乙個已被宣告的變數或常量。
特殊標記 := 則用於在宣告乙個變數的同時對這個變數進行賦值,且只能在函式體內使用。
又如下:
v, ok =<-chv ,ok :=<-ch
當同時對兩個變數進行賦值或初始化時,第二個變數將會是乙個布林型別的值。這個值代表了接收操作的成功與否。如果是false,表示通道關閉了。
Go語言學習筆記 list的基本使用
1.初始化列表 變數名 list.new var 變數名 list.list 2.在列表中插入元素 雙鏈表支援從佇列前方或者後方插入元素,分別對應的方法是pushfront和pushback.這兩個方法都會返回乙個 list.element結構。示例 l list.new l.pushback fi...
go語言學習筆記
type info struct func main fmt.println info1 data,json.marshal info1 fmt.println string data 輸出 這裡要特別注意的是 json 冒號後面和雙引號之間千萬不要有空格!被坑慘了 go語言 import的包的前面...
Go語言 學習筆記
import 下劃線 如 import hello imp 的作用 當匯入乙個包時,該包下的檔案裡所有init 函式都會被執行,然而,有些時候我們並不需要把整個包都匯入進來,僅僅是是希望它執行init 函式而已。這個時候就可以使用 import 引用該包。即使用 import 包路徑 只是引用該包,...