1. 程式人生 > 實用技巧 >Go之指標

Go之指標


package main

import "fmt"
// import "strings"
func main() {
	// 指標
	// 區別於C/C++中的指標,Go語言中的
	// 指標不能進行偏移和運算,是安全指標
	// Go語言中的函式傳參都是值拷貝
	// 當我們需要修改某個變數,可以建立一個指向
	// 該變數地址的指標變數

	// Go語言中的值型別(int,float,bool,string,array,struct)
	// 都有對應的指標型別
	a := 10
	b := &a
	fmt.Println(b) //0xc000012090
	fmt.Println(*b) //10

	// new和make的區別
	// new是一個內建函式,它的函式簽名如下
	// func new(Type) *Type
	// new函式不太常用,使用new函式得到的是一個型別的指標
	// 並且該指標對應的值為該型別的零值
	c := new(int)
	fmt.Println(*c) //0
	// make也用於記憶體分配,區別於new
	// 它只用於sloce、map以及chan的記憶體建立
	// 而且它返回的型別就是折三個型別本身,而不是它們的指標型別
	// 因為這三種類型就是引用型別,所以沒必要返回它們的指標了
	// 它的函式簽名如下
	// func make(t Type, size ...IntegerType) Type
	// make函式無可替代,我們使用sloce、map以及chan 的時候
	// 都需要用make進行初始化,然後才可以對它進行操作
	x := make([]int, 4)
	fmt.Println(x)

	// 自定義型別
	// go語言中可以通過type關鍵字來自定義型別
	// 自定義型別定義了一個全新的型別,我們可以基於內建的基本型別定義
	// 也可以通過struct定義
	// 通過type關鍵詞的定義,MyInt就是一中新的型別,它具有int的特性
	type MyInt int
	var y MyInt = 55
	fmt.Println(y)

	// 類型別名
	type TheInt = int
	var z TheInt = 55
	fmt.Println(z)
	// 我們之前見過的type就是類型別名
	// 它們的定義是 type byte = uint8
}