Golang學習筆記(二)

(文章持續更新中...有志同道合的人能夠一塊兒探討下。整個系列(1~8)準備重寫,不過都是很基礎的入門筆記,想學到很深刻的東西則不建議閱讀...)bash

熟悉Go基本語法

變量(內存塊)是用來存儲數據。類型有:整型、浮點型、布爾型、結構體等。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) // 會截斷輸出
複製代碼

Go語言指針

  • 類型指針,容許對這個指針類型的數據進行修改。傳遞數據使用指針,而無須拷貝數據。類型指針不能進行偏移和運算
  • 切片,由指向起始元素的原始指針、元素數量和容量組成。

切片比原始指針具有更強大的特性。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 是同一個類型。

相關文章
相關標籤/搜索