GO语言学习日记:工厂模式

本文介绍了如何在Go语言中使用工厂模式来访问私有结构体的变量。通过在model包中定义一个名为student的私有结构体,并提供一个公共的NewStudent函数来返回结构体的指针。此外,还定义了一个公有方法Getscore,允许外部通过结构体指针获取score值。在main包中,我们展示了如何实例化model包的student结构体,并调用Getscore方法来获取并打印私有变量。
摘要由CSDN通过智能技术生成
package model

type student struct {
	Name  string
	score float64
}

//因为student结构体首字母是小写,因此之恩那个在model来使用
//通过工厂模式来解决这个问题
//1.在model里面增加一个方法来返回student类型的地址
func NewStudent(n string, a float64) *student {
	return &student{
		Name:  n,
		score: a, //可以调用这个公共方法来返回student的指针
	}
}

//Getscore的G是大写的所以Getscore是一个公共的函数可以在main中调用,只要传入一个student的地址就可以返回值。
//Getscore是值拷贝还是地址拷贝和谁调用它没有关系,因为在声明的时候就已经写了s *student,所以是地址拷贝。
func (s *student) Getscore() float64 {
	return s.score
}

如果想把在model下写的私有结构体的私有变量让main所获取,首先需要一个公共的函数NewStudent来使得main函数可以创建model中的结构体,NewStudent的原理是可以返回这个结构体的地址,接着利用这个结构体的地址可以调用公共方法Getscore,因为Getscore在声明 的时候就已经写好是地址传递的方法了,所以将结构体的地址传进去可以得到私有的返回值来获得私有变量。

package main

import (
	"fmt"
	"go_code/model"
)

func main() {
	var stu = model.NewStudent("tom", 88.8)
	fmt.Println(stu)
	fmt.Println(*stu)
	fmt.Println(stu.Name)
	fmt.Println("用Get方法得到的")
	a := stu.Getscore()
	fmt.Println(a)
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值