GO---可见性规则

一、Go 可见性核心规则

Go 语言没有public/private/protected关键字通过标识符首字母大小写控制可见性,这是 Go 独有的访问权限设计规则:

  1. 首字母大写公开可见所有包都能访问(包括外部包、当前包)
  2. 首字母小写私有可见仅当前包内能访问,外部包完全无法调用

二、高频使用场景的可见性要求

想要在 A 包中使用 B 包的成员 ,以下所有标识符首字母必须大写

  1. 调用函数 → 函数名大写
  2. 定义 / 使用结构体类型 → 结构体名大写
  3. 访问结构体成员变量 / 方法 → 成员名、方法名大写
  4. 使用自定义类型 → 类型名大写

三、代码验证(最直观理解)

1. 外部包定义(test 包)

go

Go 复制代码
// 文件名:test/test.go
package test

import "fmt"

// ---------------- 私有成员(首字母小写,仅test包内能访问) ----------------
// myFunc 私有函数:外部包无法调用
func myFunc() {
	fmt.Println("this is myFunc(私有)")
}

// user 私有结构体:外部包无法定义、使用
type user struct {
	name string // 私有成员:外部包无法访问
	age  int
}

// ---------------- 公开成员(首字母大写,所有包可访问) ----------------
// MyFunc 公开函数:外部包可直接调用
func MyFunc() {
	fmt.Println("this is MyFunc(公开)")
}

// User 公开结构体:外部包可定义、使用
type User struct {
	Name string // 公开成员:外部包可赋值/访问
	Age  int    // 公开成员
}

2. 主包调用(main 包,跨包访问)

go

Go 复制代码
// 文件名:main.go
package main

import (
	"test" // 导入自定义test包
)

func main() {
	// 成功:调用公开函数 MyFunc(首字母大写)
	test.MyFunc()

	// 报错:无法调用私有函数 myFunc(首字母小写)
	// test.myFunc()

	// 成功:定义公开结构体 User(首字母大写)
	u := test.User{
		Name: "张三", //  成功:访问公开成员 Name
		Age:  18,    //  成功:访问公开成员 Age
	}
	println(u.Name, u.Age)

	//  报错:无法定义私有结构体 user
	// u2 := test.user{}
	//  报错:无法访问私有成员 name
	// println(u.name)
}

四、核心总结

  1. 可见性是包级别的 :最小控制单元是,不是类 / 对象
  2. 大小写定生死:大写 = 公开,小写 = 私有
  3. 全链路大写 :想用外部包的函数、结构体、成员,全部首字母大写
  4. 私有作用:封装内部逻辑,避免外部随意修改,保证代码安全性
相关推荐
萧瑟余晖7 分钟前
Hibernate 核心原理与架构详解
开发语言·架构·hibernate
爱喝水的鱼丶8 分钟前
SAP-ABAP:SAP MM 模块物料主数据批量导入与增强开发:字段扩展、校验逻辑与批量导入工具开发
开发语言·性能优化·sap·abap·增强·经验交流·mm
geovindu12 分钟前
rust:Builder Pattern
开发语言·设计模式·rust·建造者模式
白远山20 分钟前
健身场馆无人自动化解决方案:从架构到落地实践
java·开发语言·数据库·数据挖掘·需求分析
Data_Journal1 小时前
如何将网页抓取用于机器学习
大数据·开发语言·数据库·python·scrapy
郝学胜-神的一滴2 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm
一水鉴天2 小时前
词、术语、概念:从特征集收束到统一拓扑变换的升格与降格模型 20260915(豆包)
开发语言·人工智能
weixin_307779132 小时前
C++代码实现MATLAB中的ode45函数功能
开发语言·c++·算法·matlab
是立不是利3 小时前
大文件导致请求被拒的连锁反应
开发语言·前端·javascript