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. 私有作用:封装内部逻辑,避免外部随意修改,保证代码安全性
相关推荐
Data_Journal2 小时前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
豆角焖肉3 小时前
SSM 聚合项目搭建:多 Maven 模块项目
开发语言·python·pycharm
Frank_refuel3 小时前
【C++八股】面向对象
开发语言·c++
m0_380743874 小时前
为 OpenAI 兼容接口配置教程
开发语言·python·node.js
万邦科技Lafite5 小时前
阿里巴巴拍立淘按图搜索商品API返回值实践:提升用户购物满意度的关键措施
开发语言·api·开放api·电商开放平台·京东开放平台
小小龙学IT5 小时前
Qt 6 跨平台开发完全指南:从信号槽机制到实际项目落地
开发语言·qt
leisoo80975 小时前
ig50数据落盘ClickHousevsTimescaleDBvsDuckDB实测对比 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
敢敢のwings6 小时前
智元 GO-2 与 AgiBot-World 深度解读
开发语言·后端·golang
yaoxin5211236 小时前
503. Java 反射 - 编写 ServiceFactory 类
java·开发语言·python
FfHUCisI7 小时前
Golang 数据库连接池深度调优
android·数据库·golang