Go new函式 例子解析答疑

2022-05-20 15:36:50 字數 1291 閱讀 3711

package main

import "fmt"

func main()

s3 := int

fmt.println("s1: ", s1)

fmt.printf("s2:%v\n", s2)

fmt.printf("s2:%t\n", s2)

fmt.println("s3: ", s3)

}

輸出

p1 0xc00000a0d0

*p1 1

&p1 0xc000006028

s1: &

s2:[0xc00000a0d0]

s2:*int

s3: [1 2]

s1 將建立乙個int型別的匿名變數,初始化為int型別的零值,然後返回變數位址,返回的指標型別為 *int 。

s2 宣告建立乙個int指標型別的空切片。

s3 宣告建立乙個int型別的切片,初始化字面量1,2。

s1是指標位址,s2是存放指標位址的切片,s3就是乙個切片。

用new建立變數和普通變數宣告語句方式建立變數沒有什麼區別,除了不需要宣告乙個臨時變數的名字外,還可以在表示式中使用new(t)。new函式類似是一種語法糖,直接返回變數的位址,而不是乙個新的基礎概念。

下面的兩個newint函式有著相同的行為:

func newint() *int 

func newint() *int

p := new(int)

q := new(int)

fmt.println(p == q) // "false"

new函式使用常見相對比較少,因為對應結構體來說,可以直接使用字面量語法建立新變數的方法會更靈活。

由於new只是乙個預定義的函式,它並不是乙個關鍵字,因此可以將new名字重新定義為別的型別。例如下面的例子:

func delta(old, new int) int
由於new被定義為int型別的變數名,因此在delete函式內部是無法使用內建的new函式的。

s2是int型別指標切片,直接存放int型別的指標位址就好

參考:go語言fmt.sprintf、fmt.printf(格式化輸出)

%t 	輸出 go 語言語法格式的型別和值

fmt.printf("s2:%t\n", s2)

輸出

s2:*int

字元函式例子

要查詢以某個字結尾等於什麼的記錄 select from vehicle 車牌號以7結尾的資料記錄 select from vehicle t where trim t.veh no like 7 用函式的方式 select from vehicle t where substr trim t.ve...

C 建構函式 例子

建構函式,去掉this class person public person string name,string int age,double weight public void eatfood double quanity class program age weight firstman.n...

C 建構函式例子

已知string類定義如下 class string public string constchar str null 通用建構函式 string conststring another 拷貝建構函式 string 析構函式 string operater const string rhs 賦值函式...