Go语言-小写字母开头的变量无法直接引入的理解

对于不可导出(引入)字段的理解——小写字母开头的结构体名称与成员名称

实现跨包创建结构体实例(变量)——当结构体变量首字母小写时,无法直接引入
当结构首字母小写时,类似private(不可导出字段),只能在包内使用,无法跨包使用
通过工厂模式解决:

// 以下为model
type student struct {
	Name string
	Score float64
}

func NewStudent(n string, s float64) *student {
	return &student {
		Name : n,
		Score : s,
	}
}
// 以下为main
import (
	"Project1/model"
	"fmt"
)

func main() {
	var stu = model.NewStudent("Tom", 78.9) // 在这里可以直接创建结构体实例
	fmt.Println(*stu)
	fmt.Println(stu.Name)
}

如果Score字段的首字母小写,则其他包依然不可以进行直接访问(再次类似于其余面向对象语言中的private属性,此时需要进行定义一个get方法来获取到此字段)

// 以下是model
type student struct {
	Name string
	score float64
}

func (s s*student) GetScore() float64 {
	return s.score
}
// 以下为main
import (
	"Project1/model"
	"fmt"
)

func main() {
	var stu = model.NewStudent("Tom", 78.9)
	fmt.Println(*stu)
	fmt.Println(stu.GetScore()) // 在这里可以进行正常引用私有字段
}

通过以上这些代码实现以及于其他语言的类比思想,小写字段更像是private属性。但与其他语言不同的是,Go语言中的结构体也可以作为不可导出字段(类似于private)。其结构体成员通过首字母是否大写的方式,进行判断是否为不可导出字段(private)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值