Go語言上手(一) 這是我參與「第五屆青訓營 -後端場」筆記創作活動的的第一篇筆記。 先上代碼倉庫: WenTesla/GoLang-Study: 一個學習Go的倉庫 (github.com) 這個倉庫下放下我目前學習GO的所有筆記以及代碼,還未整理,最後會將倉庫進行整理。 基礎語法 一:類型 GO ...
這是我參與「第五屆青訓營 -後端場」筆記創作活動的的第一篇筆記。
先上代碼倉庫:
這個倉庫下放下我目前學習GO的所有筆記以及代碼,還未整理,最後會將倉庫進行整理。
基礎語法
一:類型
GO的語法類似C和Python,感覺就像縫合怪
定義變數
若要聲明變數,需要使用 var
關鍵字:
單一定義:
var firstName string
前一個語句聲明 string
類型中的一個名為firstName
的變數。
這裡總結一下
標識符 xxx 類型
多定義
var (
firstName, lastName string
age int
)
加上括弧()
像C語言的結構體一樣定義,只不過順序是反的
Go可以自動推斷類型
如下所示
var (
firstName = "John"
lastName = "Doe"
age = 32
)
或者如下:
a:="111"
b:=2
c:=2.1
這一點需要註意,GO語言的聲明之後必須使用,不然會報錯
這一個特性真的讓我感到疑惑。不知道為何這樣使用
Go的基本類型如下
1 | 布爾型 布爾型的值只可以是常量 true 或者 false。一個簡單的例子:var b bool = true。 |
---|---|
2 | 數字類型 整型 int 和浮點型 float32、float64,Go 語言支持整型和浮點型數字,並且支持複數,其中位的運算採用補碼。 |
3 | 字元串類型: 字元串就是一串固定長度的字元連接起來的字元序列。Go 的字元串是由單個位元組連接起來的。Go 語言的字元串的位元組使用 UTF-8 編碼標識 Unicode 文本。 |
4 | 派生類型: 包括: (a) 指針類型(Pointer) (b) 數組類型 (c) 結構化類型(struct)(d) Channel 類型 (e) 函數類型 (f) 切片類型 (g) 介面類型(interface) (h) Map 類型 |
這裡的Go不像java一樣一切皆對象,派生類型比較多
二:基本庫
fmt函數,相當於java的System類.
輸出又類似C語言
fmt.printf(xxx)
2.切片
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
這裡創建切片和使用切片,同時列印切片的長度
Go的切片非常靈活,類似Python的使用,使用append函數是將數值追加到切片最後,同時返回切片的。使用copy函數可以創建切片的副本,同時不影響之前的切片,這裡要註意,切片在函數的參數是作為指針傳入,這一點與數組不同
3.json
Go的json非常方便,這裡不像json一樣繁瑣,直接創建結構體可以
type Student struct {
Name string `json:"name"`
Sid string `json:"sid"`
}
序列化使用Marshal函數
s := Student{Name: "jonh" ,Sid: "10323"}
//序列化
p ,err := json.Marshal(s)
反序列化使用Unmarshal函數
//反序列化
err = json.Unmarshal(p,&s)
創建結構體時候的``是序列化json的時候對應數值的鍵值
4.time
GO的時間使用非常簡單
比java簡單
time.Now()獲取時間
now.xxx()獲取年月日
now.unix()時間戳
時間的加減
Add(during)函數實現某個時間 + 時間間隔
Sub(Time)獲取時間差值
Equal()比較兩者時間的相等
Before和After顧名思義
5.int和string的相互轉化
類似java,比C++強,C++好像沒有對應的Api
strconv包
strconv.ParesXXX (y)這裡XXX表示要轉換的類型,
同時可以再傳入參數,比如指定要轉換的類型
6.定時器
GO語言這一點有點意思,別的語言還沒發現這種語法,特別是作為迴圈使用定時器,js的好像是setTimeOut,這個api是延時器
ticker := time.Tick(time.Second) //創建1秒間隔的定時器
for i := range ticker {//每1秒都會執行
fmt.Println(i)
}