go语言结构体使用工厂方法创建

前言

在学习 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)
}

实验结果:
在这里插入图片描述

总结

主要是节省空间,如果没有指针相当于值拷贝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值