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

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Go語言new與make區(qū)別

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

在 Go 語言中,newmake 都是用于創(chuàng)建新的變量的內(nèi)置函數(shù),但它們的作用是不同的。

區(qū)別

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

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

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

package main

import "fmt"

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

    // 使用 make 創(chuàng)建一個(gè)新的整型切片
    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 創(chuàng)建一個(gè)新的整型變量 numPtr,并使用 make 創(chuàng)建一個(gè)新的整型切片 numSlice。我們可以使用 fmt.Printf 函數(shù)打印變量的值和類型,發(fā)現(xiàn) numPtr 是一個(gè)指針類型,指向一個(gè)值為 0 的整型變量,而 numSlice 是一個(gè)切片類型,包含三個(gè)值為 0 的整型元素。

用法

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

new

new 用于創(chuàng)建一個(gè)新的變量,并返回變量的指針。它的語法如下:

func new(Type) *Type

其中 Type 表示要?jiǎng)?chuàng)建的變量的類型。new 函數(shù)會(huì)返回一個(gè)指向該類型變量的指針,該指針指向的變量會(huì)被初始化為零值。

下面是一個(gè)示例代碼,演示了如何使用 new 創(chuàng)建新的變量:

package main

import "fmt"

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

    // 使用 new 創(chuàng)建一個(gè)新的結(jié)構(gòu)體變量
    var personPtr *Person = new(Person)

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

// 定義一個(gè)結(jié)構(gòu)體類型
type Person struct {
    Name string
    Age  int
}

在上面的代碼中,我們使用 new 分別創(chuàng)建了一個(gè)新的整型變量 numPtr 和一個(gè)新的結(jié)構(gòu)體變量 personPtr。我們可以使用 fmt.Printf 函數(shù)打印變量的值和類型,發(fā)現(xiàn) numPtr 是一個(gè)指向一個(gè)值為 0 的整型變量的指針,而 personPtr 是一個(gè)指向一個(gè)空結(jié)構(gòu)體變量的指針。

make

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

func make(Type, size IntegerType) Type

其中 Type 表示要?jiǎng)?chuàng)建的變量的類型,size 表示類型的長(zhǎng)度或容量(僅適用于切片和通道類型)。make 函數(shù)會(huì)返回一個(gè)新的切片、映射或通道的引用,它們會(huì)被初始化為零值。

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

package main

import "fmt"

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

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

    // 使用 make 創(chuàng)建一個(gè)新的整型通道
    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 分別創(chuàng)建了一個(gè)新的整型切片 numSlice、一個(gè)新的字符串映射 strMap 和一個(gè)新的整型通道 numChan。我們可以使用 fmt.Printf 函數(shù)打印變量的值和類型,發(fā)現(xiàn) numSlice 是一個(gè)包含三個(gè)值為 0 的整型元素的切片,strMap 是一個(gè)空字符串映射,numChan 是一個(gè)容量為 3 的整型通道。

注意事項(xiàng)

在 Go 語言中,需要注意以下幾點(diǎn)關(guān)于 newmake 的使用:

  • new 只能用于創(chuàng)建變量的指針類型,不能用于創(chuàng)建其他類型的變量。
  • make 只能用于創(chuàng)建切片、映射和通道類型的變量,不能用于創(chuàng)建其他類型的變量。
  • 使用 new 創(chuàng)建的指針類型變量會(huì)被初始化為零值,但不會(huì)分配內(nèi)存空間。
  • 使用 make 創(chuàng)建的切片、映射和通道類型變量會(huì)被初始化為零值,并分配相應(yīng)的內(nèi)存空間。
  • 切片、映射和通道類型的變量必須使用 make 創(chuàng)建,否則會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。

下面是一個(gè)示例代碼,演示了 newmake 的一些注意事項(xiàng):

package main

import "fmt"

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

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

    // 嘗試解引用一個(gè)未分配內(nèi)存的指針,會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤
    // *numPtr = 123

    // 使用 make 創(chuàng)建一個(gè)新的整型變量,會(huì)導(dǎo)致編譯錯(cuò)誤
    // var num *int = make(int)

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

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

在上面的代碼中,我們使用 new 創(chuàng)建了一個(gè)新的整型變量 numPtr,并嘗試解引用它,但會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤,因?yàn)樗]有分配內(nèi)存空間。我們還嘗試使用 make 創(chuàng)建一個(gè)新的整型變量 num,但會(huì)導(dǎo)致編譯錯(cuò)誤,因?yàn)?make 只能用于創(chuàng)建切片、映射和通道類型的變量。最后,我們使用 make 創(chuàng)建了一個(gè)新的整型切片 numSlice,并使用 lencap 函數(shù)打印了它的長(zhǎng)度和容量。

總結(jié)

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

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

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