Go語言上手(一)
這是我參與「第五屆青訓營 -后端場」筆記創作活動的的第一篇筆記,
先上代碼倉庫:
WenTesla/GoLang-Study: 一個學習Go的倉庫 (github.com)
這個倉庫下放下我目前學習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一樣一切皆物件,派生型別比較多
二:基本庫
1.基本列印輸出
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)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/542033.html
標籤:其他
上一篇:Python開發的常用組件
