前言
在学习 GO 的时候,看课程结构题使用工厂方法创建的时候都是使用的指针返回,变有点好奇。做了下面的测试
一、实验如下
代码A:写了一个结构体和两个方法
- 方法一:NewCustomer
使用的地址返回 - 方法二:NewCustomer2
使用的普通结构体返回
package model
import "fmt"
type Customer struct {
Id int
Name string
Gender string
Age int
Phone string
Email string
}
// 工厂模式 结构默认是值拷贝,使用地址返回的话,可以减少相关的内存使用
func NewCustomer(id int, name string, gender string,
age int, phone string, email string) *Customer {
var customer = Customer{
Id: id,
Name: name,
Gender: gender,
Age: age,
Phone: phone,
Email: email,
}
// 打印相关的地址
fmt.Printf("%p\r\n", &customer)
return &customer
}
// 地址返回,亲测地址不一样
func NewCustomer2(id int, name string, gender string,
age int, phone string, email string) Customer {
var customer = Customer{
Id: id,
Name: name,
Gender: gender,
Age: age,
Phone: phone,
Email: email,
}
// 打印相关的地址
fmt.Printf("%p\r\n", &customer)
return customer
}
代码B:
测试代码
package main
import (
"chapter12/customermanage/model"
"fmt"
)
func main() {
// 使用地址返回
model1 := model.NewCustomer(1, "1", "2", 1, "1", "2")
fmt.Printf("%p\r\n", model1)
fmt.Printf("\r\n")
// 使用值返回
model2 := model.NewCustomer2(1, "1", "2", 1, "1", "2")
fmt.Printf("%p\r\n", &model2)
}
实验结果:
总结
主要是节省空间,如果没有指针相当于值拷贝