91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

Golang中深拷貝與淺拷貝怎么使用

小億
109
2024-01-30 15:37:06
欄目: 編程語言

在Golang中,深拷貝和淺拷貝是指在復制一個對象時,是否會復制其引用類型的數據。下面是深拷貝和淺拷貝的使用方法:

淺拷貝: 淺拷貝是指僅拷貝對象的值,而不復制引用類型的數據。在Golang中,可以使用賦值操作符 = 或者 copy 函數來進行淺拷貝。

示例代碼:

package main

import (
	"fmt"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	// 創建一個Person對象
	p1 := Person{Name: "Alice", Age: 20}

	// 使用賦值操作符進行淺拷貝
	p2 := p1

	// 修改p2的Name屬性
	p2.Name = "Bob"

	// 打印p1和p2的Name屬性
	fmt.Println(p1.Name) // 輸出:Alice
	fmt.Println(p2.Name) // 輸出:Bob
}

深拷貝: 深拷貝是指在復制對象時,會將引用類型的數據也進行復制。在Golang中,可以使用 json.Marshaljson.Unmarshal 函數來進行深拷貝。

示例代碼:

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	// 創建一個Person對象
	p1 := Person{Name: "Alice", Age: 20}

	// 使用json.Marshal和json.Unmarshal進行深拷貝
	data, _ := json.Marshal(p1)
	var p2 Person
	json.Unmarshal(data, &p2)

	// 修改p2的Name屬性
	p2.Name = "Bob"

	// 打印p1和p2的Name屬性
	fmt.Println(p1.Name) // 輸出:Alice
	fmt.Println(p2.Name) // 輸出:Bob
}

需要注意的是,進行深拷貝時,對象的成員變量必須是可導出的(即首字母大寫),否則無法正常進行深拷貝。

0
佛教| 漯河市| 景东| 皮山县| 华池县| 荔浦县| 河南省| 明星| 牡丹江市| 禹州市| 静乐县| 东安县| 南昌县| 宣威市| 昌吉市| 嘉义市| 安福县| 桑植县| 商城县| 南京市| 达州市| 青川县| 隆安县| 平顶山市| 赣州市| 厦门市| 苍南县| 昆山市| 大同县| 云林县| 南宁市| 公主岭市| 镇安县| 南京市| 治多县| 梁山县| 岱山县| 加查县| 伊宁县| 万年县| 镇雄县|