回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,17 +1,17 @@
### 2.3.3. new函
### 2.3.3. new函
另一個創建變量的方法是調用用建的new函。表式new(T)將創建一個T類型的匿名量,初始化爲T類型的零值,然後返迴變量地址,返的指針類型爲`*T`
另一个创建变量的方法是用用建的new函。表式new(T)将创建一个T类型的匿名量,初始化为T类型的零值,然后返回变量地址,返的指针类型为`*T`
```Go
p := new(int) // p, *int 型, 指向匿名的 int
p := new(int) // p, *int 型, 指向匿名的 int
fmt.Println(*p) // "0"
*p = 2 // 置 int 匿名量的值 2
*p = 2 // 置 int 匿名量的值 2
fmt.Println(*p) // "2"
```
用new創建變量和普通變量聲明語句方式創建變量沒有什麽區别,除了不需要明一個臨時變量的名字外,我們還可以在表式中使用new(T)。言之new函數類似是一種語法糖,而不是一新的基概念。
用new创建变量和普通变量声明语句方式创建变量没有什么区别,除了不需要明一个临时变量的名字外,我们还可以在表式中使用new(T)。言之new函数类似是一种语法糖,而不是一新的基概念。
下面的兩個newInt函有着相同的行
下面的两个newInt函有着相同的行
```Go
func newInt() *int {
@@ -24,7 +24,7 @@ func newInt() *int {
}
```
每次調用new函都是返迴一個新的量的地址,因此下面兩個地址是不同的:
每次用new函都是返回一个新的量的地址,因此下面两个地址是不同的:
```Go
p := new(int)
@@ -32,15 +32,15 @@ q := new(int)
fmt.Println(p == q) // "false"
```
然也可能有特殊情:如果兩個類型都是空的,也就是説類型的大小是0例如`struct{}``[0]int`, 有可能有相同的地址(依賴具體的語言實現)(譯註:請謹慎使用大小0的型,因如果型的大小位0好,可能致Go言的自垃圾收器有不同的行,具體請査`runtime.SetFinalizer`數相關文檔)。
然也可能有特殊情:如果两个类型都是空的,也就是说类型的大小是0例如`struct{}``[0]int`, 有可能有相同的地址(依赖具体的语言实现)(译注:请谨慎使用大小0的型,因如果型的大小位0好,可能致Go言的自垃圾收器有不同的行,具体请查`runtime.SetFinalizer`数相关文档)。
new函使用常見相對比較少,因爲對應結構體來説,可以直接用字面量語法創建新量的方法會更靈§4.4.1)。
new函使用常见相对比较少,因为对应结构体来说,可以直接用字面量语法创建新量的方法会更灵§4.4.1)。
new是一個預定義的函,它不是一個關鍵字,因此我可以new名字重新定義爲别的型。例如下面的例子:
new是一个预定义的函,它不是一个关键字,因此我可以new名字重新定义为别的型。例如下面的例子:
```Go
func delta(old, new int) int { return new - old }
```
new被定義爲int型的量名因此在delta函數內部是法使用置的new函的。
new被定义为int型的量名因此在delta函数内部是法使用置的new函的。