日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Go語言new與make區別

作者:GeeCode 更新時間: 2023-07-09 編程語言

在 Go 語言中,newmake 都是用于創建新的變量的內置函數,但它們的作用是不同的。

區別

在 Go 語言中,newmake 的作用是不同的:

  • new 用于創建一個新的變量,并返回變量的指針。
  • make 用于創建一個新的切片、映射或通道,并返回它們的引用。

雖然 newmake 的作用不同,但它們都可以用于創建新的變量。下面是一個示例代碼,演示了如何使用 newmake 創建新的變量:

package main

import "fmt"

func main() {
    // 使用 new 創建一個新的整型變量
    var numPtr *int = new(int)

    // 使用 make 創建一個新的整型切片
    var numSlice []int = make([]int, 3)

    // 打印變量的值和類型
    fmt.Printf("%v %T\n", numPtr, numPtr)   // 輸出:0x12345678 *int
    fmt.Printf("%v %T\n", numSlice, numSlice) // 輸出:[0 0 0] []int
}

在上面的代碼中,我們使用 new 創建一個新的整型變量 numPtr,并使用 make 創建一個新的整型切片 numSlice。我們可以使用 fmt.Printf 函數打印變量的值和類型,發現 numPtr 是一個指針類型,指向一個值為 0 的整型變量,而 numSlice 是一個切片類型,包含三個值為 0 的整型元素。

用法

在 Go 語言中,newmake 的用法有以下幾點需要注意:

new

new 用于創建一個新的變量,并返回變量的指針。它的語法如下:

func new(Type) *Type

其中 Type 表示要創建的變量的類型。new 函數會返回一個指向該類型變量的指針,該指針指向的變量會被初始化為零值。

下面是一個示例代碼,演示了如何使用 new 創建新的變量:

package main

import "fmt"

func main() {
    // 使用 new 創建一個新的整型變量
    var numPtr *int = new(int)

    // 使用 new 創建一個新的結構體變量
    var personPtr *Person = new(Person)

    // 打印變量的值和類型
    fmt.Printf("%v %T\n", numPtr, numPtr)         // 輸出:0x12345678 *int
    fmt.Printf("%v %T\n", personPtr, personPtr) // 輸出:&{ 0} *main.Person
}

// 定義一個結構體類型
type Person struct {
    Name string
    Age  int
}

在上面的代碼中,我們使用 new 分別創建了一個新的整型變量 numPtr 和一個新的結構體變量 personPtr。我們可以使用 fmt.Printf 函數打印變量的值和類型,發現 numPtr 是一個指向一個值為 0 的整型變量的指針,而 personPtr 是一個指向一個空結構體變量的指針。

make

make 用于創建一個新的切片、映射或通道,并返回它們的引用。它的語法如下:

func make(Type, size IntegerType) Type

其中 Type 表示要創建的變量的類型,size 表示類型的長度或容量(僅適用于切片和通道類型)。make 函數會返回一個新的切片、映射或通道的引用,它們會被初始化為零值。

下面是一個示例代碼,演示了如何使用 make 創建新的切片、映射和通道:

package main

import "fmt"

func main() {
    // 使用 make 創建一個新的整型切片
    var numSlice []int = make([]int, 3)

    // 使用 make 創建一個新的字符串映射
    var strMap map[string]string = make(map[string]string)

    // 使用 make 創建一個新的整型通道
    var numChan chan int = make(chan int, 3)

    // 打印變量的值和類型
    fmt.Printf("%v %T\n", numSlice, numSlice)   // 輸出:[0 0 0] []int
    fmt.Printf("%v %T\n", strMap, strMap)     // 輸出:map[] map[string]string
    fmt.Printf("%v %T\n", numChan, numChan) // 輸出:0xc00001a0c0 chan int
}

在上面的代碼中,我們使用 make 分別創建了一個新的整型切片 numSlice、一個新的字符串映射 strMap 和一個新的整型通道 numChan。我們可以使用 fmt.Printf 函數打印變量的值和類型,發現 numSlice 是一個包含三個值為 0 的整型元素的切片,strMap 是一個空字符串映射,numChan 是一個容量為 3 的整型通道。

注意事項

在 Go 語言中,需要注意以下幾點關于 newmake 的使用:

  • new 只能用于創建變量的指針類型,不能用于創建其他類型的變量。
  • make 只能用于創建切片、映射和通道類型的變量,不能用于創建其他類型的變量。
  • 使用 new 創建的指針類型變量會被初始化為零值,但不會分配內存空間。
  • 使用 make 創建的切片、映射和通道類型變量會被初始化為零值,并分配相應的內存空間。
  • 切片、映射和通道類型的變量必須使用 make 創建,否則會導致運行時錯誤。

下面是一個示例代碼,演示了 newmake 的一些注意事項:

package main

import "fmt"

func main() {
    // 使用 new 創建一個新的整型變量
    var numPtr *int = new(int)

    // 打印指針的值
    fmt.Println(numPtr) // 輸出:0x12345678

    // 嘗試解引用一個未分配內存的指針,會導致運行時錯誤
    // *numPtr = 123

    // 使用 make 創建一個新的整型變量,會導致編譯錯誤
    // var num *int = make(int)

    // 使用 make 創建一個新的整型切片
    var numSlice []int = make([]int, 3)

    // 打印切片的長度和容量
    fmt.Printf("%v %T\n", len(numSlice), len(numSlice)) // 輸出:3 int
    fmt.Printf("%v %T\n", cap(numSlice), cap(numSlice)) // 輸出:3 int
}

在上面的代碼中,我們使用 new 創建了一個新的整型變量 numPtr,并嘗試解引用它,但會導致運行時錯誤,因為它并沒有分配內存空間。我們還嘗試使用 make 創建一個新的整型變量 num,但會導致編譯錯誤,因為 make 只能用于創建切片、映射和通道類型的變量。最后,我們使用 make 創建了一個新的整型切片 numSlice,并使用 lencap 函數打印了它的長度和容量。

總結

本文介紹了 Go 語言中 newmake 的區別、用法和注意事項,并提供了相應的示例代碼。雖然 newmake 都用于創建新的變量

原文鏈接:https://blog.csdn.net/GeeCode/article/details/131465851

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新