go語言中定義變數使用關鍵字var,如:var x int=4
也可以寫成x:=4;
在函式中,:= 簡潔賦值語句在明確型別的地方,可以用於替代 var 定義。
(:= 結構不能使用在函式外,函式外的每個語法塊都必須以關鍵字開始。)
package main
import (
"fmt"
func main() {
var x int = 4
fmt.println(x)//輸出4
fmt.println(&x)//輸出指標
//錯誤
y := 4
fmt.println(y)//輸出4
fmt.println(&y)//輸出指標
//錯誤
var v *int = new(int)//返回值為指標
fmt.println(*v)//輸出為0,它只是將記憶體清零,而不是初始化記憶體
*v = 4//賦值
fmt.println(v)//輸出指標
fmt.println(*v)//輸出4
z := new(int)//代替var v *int = new(int)
*z = 3
fmt.println(z)//輸出指標
fmt.println(*z)//輸出3
總結go語言的變數定義返回值中隱含了指標,可以進行取指標操作,不嫩進行取值操作。
new和make的區別***
記憶體分配
new 是乙個分配記憶體的內建函式,但不同於其他語言中同名的new所作的工作,它只是將記憶體清零,而不是初始化記憶體。new(t)為乙個型別為t的新專案分配了值為零的儲存空間並返回其位址,也就是乙個型別為*t的值。用go的術語來說,就是它返回了乙個指向新分配的型別為t的零值的指標。
make(t,args)函式的目的與new(t)不同。它僅用於建立切片、map和chan(訊息管道),並返回型別t(不是*t)的乙個被初始化了的(不是零)例項。這種差別的出現是由於這三種型別實質上是對在使用前必須進行初始化的資料結構的引用。例如,切片是乙個具有三項內容的描述符,包括指向資料(在乙個陣列內部)的指標、長度以及容量,在這三項內容被初始化之前,切片值為nil。對於切片、對映和通道,make初始化了其內部的資料結構並準備了將要使用的值。如:
下面的**分配了乙個整型陣列,長度為10,容量為100,並返回前10個陣列的切片
make(int, 10, 100)
以下示例說明了new和make的不同。
var p *int = new(int) // 為切片結構分配記憶體;*p == nil;很少使用
var v int = make(int, 10) // 切片v現在是對乙個新的有10個整數的陣列的引用
// 不必要地使問題複雜化:
var p *int = new(int)
fmt.println(p) //輸出:&
*p = make(int, 10, 10)
fmt.println(p) //輸出:&[0 0 0 0 0 0 0 0 0 0]
fmt.println((*p)[2]) //輸出: 0
// 習慣用法:
v := make(int, 10)
fmt.println(v) //輸出:[0 0 0 0 0 0 0 0 0 0]
go var 乙個整數 Go 語言資料型別
字串去除空格和換行符package main import fmt strings func main str 這裡是 www n.runoob n.com fmt.println 原字串 fmt.println str 去除空格 str strings.replace str,1 去除換行符 st...
go var 乙個整數 Go語言基礎之基本資料型別
go語言中有豐富的資料型別,除了基本的整型 浮點型 布林型 字串外,還有陣列 切片 結構體 函式 map 通道 channel 等。go 語言的基本型別和其他語言大同小異。基本資料型別 整型整型分為以下兩個大類 按長度分為 int8 int16 int32 int64 對應的無符號整型 uint8 ...
go語言中iota的乙個例子
package main import fmt type bitflag int const iota為0,1左移0位 1 active bitflag 1 iota send active 1 iota,此時iota為1,1左移1位 2 send receive send 1 iota,此時iot...