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 小时前
Python 高级编程 026:内置数据结构之骈文纵论
开发语言·数据结构·python·程序人生·软件工程
隐积8 小时前
3.1.7.Qt容器大家族(3):QVariant——万能盒子
开发语言·qt
名字还没想好☜11 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
初级代码游戏12 小时前
iOS开发 Swift 速记1:变量和基本数据类型
开发语言·ios·swift
酷在前行13 小时前
【R生态】PERMANOVA 进阶实战:距离选择、PERMDISP、两两比较与受限置换(保姆级教程)
开发语言·r语言
cxr82813 小时前
Graphify vs GitNexus vs CodeGraph — 三工具架构深度对比
开发语言·架构·知识图谱
废弃的小码农14 小时前
功能测试--Day07--Python编程基础
开发语言·python
fengci.15 小时前
Microweber CMS 未授权路径穿越漏洞(CVE-2026-65694)
android·开发语言·前端·学习·php
程序员zgh15 小时前
C++ 拷贝赋值运算符 详解
c语言·开发语言·c++
念何架构之路15 小时前
restartmanager-重启管理子系统
java·开发语言