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. 私有作用:封装内部逻辑,避免外部随意修改,保证代码安全性
相关推荐
惊讶的猫3 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python
cmpxr_3 小时前
【MicroPython】如何刷新ESP8266的固件
开发语言·micropython
搭贝4 小时前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
智感子4 小时前
智能称重·数据上云:从仪表读数到可追溯的计量凭证
开发语言·php
\光辉岁月/4 小时前
7.javase-面向对象
java·开发语言
weixin_531094694 小时前
heap_4内存管理
java·开发语言·算法
疯狂的维修4 小时前
关于用C#写电机起保停控制
开发语言·c#
geovindu5 小时前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式
“AI国潮设计-小江”6 小时前
《Python+SDXL实战:用ControlNet批量生成“英歌舞麻将糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
Cc.Y6 小时前
Java零基础入门:封装与继承 —— 从“裸奔“到“穿衣服“,从“重复造轮子“到“站在巨人肩膀上“
java·开发语言