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. 私有作用:封装内部逻辑,避免外部随意修改,保证代码安全性
相关推荐
逝水无殇1 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
这是个栗子2 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript
凤凰院凶涛QAQ2 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
研☆香3 小时前
为什么变量声明在赋值前也能使用?—— 深入理解 JavaScript 变量提升与作用域
开发语言·前端·javascript
右耳朵猫AI3 小时前
PHP周刊2026W28 | 安全更新、Laravel 13.18、Twig 3.28
开发语言·php·laravel
second603 小时前
第一部分:快速上手 —— 建立 C++ 基本语法与编程范式
开发语言·c++
郝学胜-神的一滴3 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
bksczm3 小时前
linux之线程概念和控制
linux·开发语言·c++
JackieZhengChina4 小时前
零依赖轻量级JS悬浮提示插件title2tip-js的使用教程
开发语言·javascript·ecmascript