(文章持續更新中...有志同道合的人能夠一塊兒探討下。整個系列(1~8)準備重寫,不過都是很基礎的入門筆記,想學到很深刻的東西則不建議閱讀...)bash
變量(內存塊)是用來存儲數據。類型有:整型、浮點型、布爾型、結構體等。Go 語言的每個變量都擁有本身的類型,必須通過聲明才能開始用。數據結構
變量聲明基本格式:tcp
var 變量名 變量類型
var a int
var b string
var c []float64 // 切片格式
var d func() bool // 聲明一個返回值爲布爾類型的函數變量
var e struct{
x int
}
批量聲明
var (
a int
b string
c []float64
d func() bool
e struct {
x int
}
)
複製代碼
變量聲明會默認進行初始化函數
var 變量名 類型 = 表達式
var hp int = 100
推導式申明,編譯器會嘗試根據等號右邊的表達式推導 hp 變量的類型
var hp = 100
短變量聲明並初始化
hp := 10
conn, err := net.Dial("tcp","127.0.0.1:8080")
匿名變量 用_表示,匿名變量不佔用命名空間,不會分配內存。匿名變量不會由於屢次聲明而沒法使用。
func GetName() (string, string) {
return "wu", "winyh"
}
a, _ := GetData()
_, b := GetData()
// 打印浮點數時,可使用 fmt 包配合動詞%f
package main
import (
"fmt"
"math"
)
func main() {
fmt.Printf("%f\n", math.Pi)
fmt.Printf("%.2f\n", math.Pi) // 按默認寬度,2 位精度輸出
}
複製代碼
Go語言有豐富的數據類型,除了基本的整型、浮點型、布爾型、字符串外,還有切片、結構體、函數、map、通道(channel)等ui
Go 語言的標準庫支持對圖片像素進行訪問(好強大的樣子),而且支持輸出各類圖片格式,如 JPEG、PNG、GIF 等。spa
Go 語言中不容許將整型強制轉換爲布爾型,布爾型沒法參與數值運算,也沒法與其餘類型進行轉換。 Go 使用類型前置加括號的方式進行類型轉換指針
var a int32 = 1047483647
b := int16(a) // 會截斷輸出
複製代碼
切片比原始指針具有更強大的特性。code
棧(Stack)是一種擁有特殊規則的線性表數據結構。後進先出(LIFO) 棧可用於內存分配,棧的分配和回收速度很是快。 變量生命週期生命週期
func calc(a, b int) int {
var c int
c = a * b
var x int
x = c * 10
return x
}
以上默認狀況下會將 c 和 x 分配在棧上,這兩個變量在 calc() 函數退出時就再也不使用,函數結束時,保存 c 和 x 的棧內存再出棧釋放內存,整個分配內存的過程經過棧的分配和回收都會很是迅速。
複製代碼
堆和棧分配內存相比,堆適合不可預知大小的內存分配。可是爲此付出的代價是分配速度較慢,並且會造成內存碎片。圖片
常量是恆定不變的值,沒法被修改
const (
pi = 3.141592
e = 2.718281
)
複製代碼
Go語言type關鍵字(類型別名)
type TypeAlias = Type
package main
import (
"fmt"
)
// 將NewInt定義爲int類型
type NewInt int
func main() {
// 將a聲明爲NewInt類型
var a NewInt
// 查看a的類型名
fmt.Printf("a type: %T\n", a)
}
複製代碼
TypeAlias 只是 Type 的別名,本質上 TypeAlias 與 Type 是同一個類型。