Go常见错误第14篇:过度使用getter和setter方法

前言

这是Go常见错误系列的第14篇:过度使用getter和setter方法。

素材来源于Go布道者,现Docker公司资深工程师Teiva Harsanyi

本文涉及的源代码全部开源在:Go常见错误源代码,欢迎大家关注公众号,及时获取本系列最新更新。

常见错误和最佳实践

现状

写Java或者C++的人,可能会习惯下面的编程模式:

  • 将不希望外部直接访问的类成员变量设置为private私有成员。
  • 在类里定义public的get和set方法,用于外部获取和修改这个成员变量的值。get方法我们叫做getter,set方法叫做setter。

这是一种数据封装模式,在Java和C++里被广泛使用。

但是在Go语言里,官方从来没有建议使用getter和setter,我们可以直接访问结构体里的成员变量。

成员变量的可见性通过结构体标识符首字母大小写以及成员变量首字母大小写来控制到package这个层面。

  • 如果结构体要被其它package使用,那结构体的标识符或者说结构体的名称首字母要大写。
  • 如果结构体的成员要被其它package使用,那结构体和结构体的成员标识符首字母都要大写,否则只能在当前包里使用。

举个Go标准库里的time.Timer结构体的例子:

// The Timer type represents a single event.
// When the Timer expires, the current time will be sent on C,
// unless the Timer was created by AfterFunc.
// A Timer must be created with NewTimer or AfterFunc.
type Timer struct {
   
	C <-chan Time
	r runtimeTimer
}

Timer结构体定义如上所示,里面有一个成员变量C用于接收Timer到点后的当前时间。

Timer和C都是大写,所以我们可以直接在下面的代码里访问Timer里的成员变量C拿到当前时间。

package main

import (
	"fmt"
	"time"
)

func main() {
   
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值