本文目錄一覽:
- 1、Go語言基礎語法(一)
- 2、go和c++的區別
- 3、golang是什麼意思
- 4、go的十六種時態是什麼
- 5、Golang為什麼要用這種非主流的語法
- 6、基礎知識 – Golang 中的格式化輸入輸出
Go語言基礎語法(一)
本文介紹一些Go語言的基礎語法。
先來看一個簡單的go語言代碼:
go語言的注釋方法:
代碼執行結果:
下面來進一步介紹go的基礎語法。
go語言中格式化輸出可以使用 fmt 和 log 這兩個標準庫,
常用方法:
示例代碼:
執行結果:
更多格式化方法可以訪問中的fmt包。
log包實現了簡單的日誌服務,也提供了一些格式化輸出的方法。
執行結果:
下面來介紹一下go的數據類型
下表列出了go語言的數據類型:
int、float、bool、string、數組和struct屬於值類型,這些類型的變數直接指向存在內存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。
常量是在程序編譯時就確定下來的值,程序運行時無法改變。
執行結果:
執行結果:
Go 語言的運算符主要包括算術運算符、關係運算符、邏輯運算符、位運算符、賦值運算符以及指針相關運算符。
算術運算符:
關係運算符:
邏輯運算符:
位運算符:
賦值運算符:
指針相關運算符:
下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯用,這裡不做介紹。
if語法格式如下:
if … else :
else if:
示例代碼:
語法格式:
另外,添加 fallthrough 會強制執行後面的 case 語句,不管下一條case語句是否為true。
示例代碼:
執行結果:
下面介紹幾種循環語句:
執行結果:
執行結果:
也可以通過標記退出循環:
–THE END–
go和c++的區別
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。
Go的語法接近C語言,但對於變數的聲明有所不同。Go支持垃圾回收功能。Go的並行模型是以東尼·霍爾的通信順序進程(CSP)為基礎,採取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運算的特徵,比如通道傳輸。在1.8版本中開放插件(Plugin)的支持,這意味著現在能從Go中動態載入部分函數。
與C++相比,Go並不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數等功能,但增加了 切片(Slice) 型、並發、管道、垃圾回收、介面(Interface)等特性的語言級支持。Go 2.0版本將支持泛型,對於斷言的存在,則持負面態度,同時也為自己不提供類型繼承來辯護。
在Go中有幾項規定,當不匹配以下規定時編譯將會產生錯誤。
每行程序結束後不需要撰寫分號(;)。
大括弧({)不能夠換行放置。
if判斷式和for循環不需要以小括弧包覆起來。
參考:百度百科
golang是什麼意思
Go語言(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。 擴展資料
Go語言主要用作伺服器端開發,其定位是用來開發「大型軟體」的,適合於很多程序員一起開發大型軟體,並且開發周期長,支持雲計算的網路服務。Go語言能夠讓程序員快速開發,並且在軟體不斷的’增長過程中,它能讓程序員更容易地進行維護和修改。它融合了傳統編譯型語言的高效性和腳本語言的易用性和富於表達性。
Go語言作為伺服器編程語言,很適合處理日誌、數據打包、虛擬機處理、文件系統、分散式系統、資料庫代理等;網路編程方面,Go語言廣泛應用於Web應用、API應用、下載應用等;除此之外,Go語言還可用於內存資料庫和雲平台領域,目前國外很多雲平台都是採用Go開發。
go的十六種時態是什麼
go只有十一種時態,如下:
1、過去式:went。
2、過去分詞:gone。
3、現在分詞:going。
4、第三人稱單數:goes。
5、一般現在:go或者goes。
6、一般過去:went。
7、一般將來:will go。
8、過去將來時:would go或者was going to go。
9、進行時:going。
10、完成時:have gone。
11、完成進行時:have been going。
擴展資料
go的語法解析:
1、go的基本意思是「離開原來的地方向別處挪動」。
2、go用作不及物動詞時,常可接帶to的動詞不定式,這動詞不定式並不是用作狀語表示目的,而是與go構成一個動詞短語,意思是「去做某事」,在非正式英語中,這種結構常可變為go and do sth,而在美式英語中and常被省去。
3、go常用於「be going to+動詞原形」結構,可以用於表示時間,即「將要做某事」;也可以用於表示意志,即「打算做某事」「準備做某事」。
4、「be going to」後有時也可接名詞(多表示地點),這時to是介詞。現代英語中也可用「be going to go to」,兩者意思相同,都表示「去某地」,但後者使用不太廣泛。
5、go to後常接不帶冠詞的名詞,表示去進行一種活動,而不表示去什麼地方。
6、go也可用作系動詞,其後多接形容詞或常用作形容詞的過去分詞作表語,多表示不好的意思。
Golang為什麼要用這種非主流的語法
type Foo func() func() func() func()
typedef void(*((*((*((*Foo)()))()))()))();
感受一下差別,哪個好讀,哪個好寫。
這個類型用英文描述就是,Foo is function returning function returning function returning function。
基礎知識 – Golang 中的格式化輸入輸出
【格式化輸出】
// 格式化輸出:將 arg 列表中的 arg 轉換為字元串輸出
// 使用動詞 v 格式化 arg 列表,非字元串元素之間添加空格
Print(arg列表)
// 使用動詞 v 格式化 arg 列表,所有元素之間添加空格,結尾添加換行符
Println(arg列表)
// 使用格式字元串格式化 arg 列表
Printf(格式字元串, arg列表)
// Print 類函數會返回已處理的 arg 數量和遇到的錯誤信息。
【格式字元串】
格式字元串由普通字元和佔位符組成,例如:
“abc%+ #8.3[3]vdef”
其中 abc 和 def 是普通字元,其它部分是佔位符,佔位符以 % 開頭(註:%% 將被轉義為一個普通的 % 符號,這個不算開頭),以動詞結尾,格式如下:
%[旗標][寬度][.精度][arg索引]動詞
方括弧中的內容可以省略。
【旗標】
旗標有以下幾種:
空格:對於數值類型的正數,保留一個空白的符號位(其它用法在動詞部分說明)。
0 :用 0 進行寬度填充而不用空格,對於數值類型,符號將被移到所有 0 的前面。
其中 “0” 和 “-” 不能同時使用,優先使用 “-” 而忽略 “0”。
【寬度和精度】
「寬度」和「精度」都可以寫成以下三種形式:
數值 | * | arg索引*
其中「數值」表示使用指定的數值作為寬度值或精度值,「 」表示使用當前正在處理的 arg 的值作為寬度值或精度值,如果這樣的話,要格式化的 arg 將自動跳轉到下一個。「arg索引 」表示使用指定 arg 的值作為寬度值或精度值,如果這樣的話,要格式化的 arg 將自動跳轉到指定 arg 的下一個。
寬度值:用於設置最小寬度。
精度值:對於浮點型,用於控制小數位數,對於字元串或位元組數組,用於控制字元數量(不是位元組數量)。
對於浮點型而言,動詞 g/G 的精度值比較特殊,在適當的情況下,g/G 會設置總有效數字,而不是小數位數。
【arg 索引】
「arg索引」由中括弧和 arg 序號組成(就像上面示例中的 [3]),用於指定當前要處理的 arg 的序號,序號從 1 開始:
‘[‘ + arg序號 + ‘]’
【動詞】
「動詞」不能省略,不同的數據類型支持的動詞不一樣。
[通用動詞]
v:默認格式,不同類型的默認格式如下:
布爾型:t
整 型:d
浮點型:g
複數型:g
字元串:s
通 道:p
指 針:p
無符號整型:x
T:輸出 arg 的類型而不是值(使用 Go 語法格式)。
[布爾型]
t:輸出 true 或 false 字元串。
[整型]
b/o/d:輸出 2/8/10 進位格式
x/X :輸出 16 進位格式(小寫/大寫)
c :輸出數值所表示的 Unicode 字元
q :輸出數值所表示的 Unicode 字元(帶單引號)。對於無法顯示的字元,將輸出其轉義字元。
U :輸出 Unicode 碼點(例如 U+1234,等同於字元串 “U+%04X” 的顯示結果)
對於 o/x/X:
如果使用 “#” 旗標,則會添加前導 0 或 0x。
對於 U:
如果使用 “#” 旗標,則會在 Unicode 碼點後面添加相應的 ‘字元’(前提是該字元必須可顯示)
[浮點型和複數型]
b :科學計數法(以 2 為底)
e/E:科學計數法(以 10 為底,小寫 e/大寫 E)
f/F:普通小數格式(兩者無區別)
g/G:大指數(指數 = 6)使用 %e/%E,其它情況使用 %f/%F
[字元串或位元組切片]
s :普通字元串
q :雙引號引起來的 Go 語法字元串
x/X:十六進位編碼(小寫/大寫,以位元組為元素進行編碼,而不是字元)
對於 q:
如果使用了 “+” 旗標,則將所有非 ASCII 字元都進行轉義處理。
如果使用了 “#” 旗標,則輸出反引號引起來的字元串(前提是
字元串中不包含任何製表符以外的控制字元,否則忽略 # 旗標)
對於 x/X:
如果使用了 ” ” 旗標,則在每個元素之間添加空格。
如果使用了 “#” 旗標,則在十六進位格式之前添加 0x 前綴。
[指針類型]
p :帶 0x 前綴的十六進位地址值。
[符合類型]
複合類型將使用不同的格式輸出,格式如下:
結 構 體:{欄位1 欄位2 …}
數組或切片:[元素0 元素1 …]
映 射:map[鍵1:值1 鍵2:值2 …]
指向符合元素的指針:{}, [], map[]
複合類型本身沒有動詞,動詞將應用到複合類型的元素上。
結構體可以使用 “+v” 同時輸出欄位名。
【注意】
1、如果 arg 是一個反射值,則該 arg 將被它所持有的具體值所取代。
2、如果 arg 實現了 Formatter 介面,將調用它的 Format 方法完成格式化。
3、如果 v 動詞使用了 # 旗標(%#v),並且 arg 實現了 GoStringer 介面,將調用它的 GoString 方法完成格式化。
如果格式化操作指定了字元串相關的動詞(比如 %s、%q、%v、%x、%X),接下來的兩條規則將適用:
4。如果 arg 實現了 error 介面,將調用它的 Error 方法完成格式化。
5。如果 arg 實現了 string 介面,將調用它的 String 方法完成格式化。
在實現格式化相關介面的時候,要避免無限遞歸的情況,比如:
type X string
func (x X) String() string {
return Sprintf(“%s”, x)
}
在格式化之前,要先轉換數據類型,這樣就可以避免無限遞歸:
func (x X) String() string {
return Sprintf(“%s”, string(x))
}
無限遞歸也可能發生在自引用數據類型上面,比如一個切片的元素引用了切片自身。這種情況比較罕見,比如:
a := make([]interface{}, 1)
a[0] = a
fmt.Println(a)
【格式化輸入】
// 格式化輸入:從輸入端讀取字元串(以空白分隔的值的序列),
// 並解析為具體的值存入相應的 arg 中,arg 必須是變數地址。
// 字元串中的連續空白視為單個空白,換行符根據不同情況處理。
// \r\n 被當做 \n 處理。
// 以動詞 v 解析字元串,換行視為空白
Scan(arg列表)
// 以動詞 v 解析字元串,換行結束解析
Scanln(arg列表)
// 根據格式字元串中指定的格式解析字元串
// 格式字元串中的換行符必須和輸入端的換行符相匹配。
Scanf(格式字元串, arg列表)
// Scan 類函數會返回已處理的 arg 數量和遇到的錯誤信息。
【格式字元串】
格式字元串類似於 Printf 中的格式字元串,但下面的動詞和旗標例外:
p :無效
T :無效
e/E/f/F/g/G:功能相同,都是掃描浮點數或複數
s/v :對字元串而言,掃描一個被空白分隔的子串
對於整型 arg 而言,v 動詞可以掃描帶有前導 0 或 0x 的八進位或十六進位數值。
寬度被用來指定最大掃描寬度(不會跨越空格),精度不被支持。
如果 arg 實現了 Scanner 介面,將調用它的 Scan 方法掃描相應數據。只有基礎類型和實現了 Scanner 介面的類型可以使用 Scan 類方法進行掃描。
【注意】
連續調用 FScan 可能會丟失數據,因為 FScan 中使用了 UnreadRune 對讀取的數據進行撤銷,而參數 io.Reader 只有 Read 方法,不支持撤銷。比如:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/198273.html