Golang 开发实战day09 - package Scope

🏆个人专栏

🤺 leetcode

🧗 Leetcode Prime

🏇 Golang20天教程

🚴‍♂️ Java问题收集园地

🌴 成长感悟

欢迎大家观看,不执着于追求顶峰,只享受探索过程

Golang 教程09 - package Scope

1. package Scope

1.1 如何理解package Scope?

在Go语言的世界里,包就像一个大家庭,每个包都有自己的"家长"------包作用域。 包作用域规定了哪些成员可以在家庭里自由活动,哪些成员只能待在自己的房间里。

想象一下,包就像一个热闹的菜市场:

  • 每个摊位就是一个包,里面摆满了各种各样的商品,也就是变量、函数、类型等成员。
    顾客可以自由地在菜市场里逛,挑选自己需要的商品。
  • 但是,每个摊位都有自己的"地盘",顾客不能随便进入摊位后面的小房间,因为那里存
  • 放着摊主的私人物品,也就是私有成员。

包作用域就像菜市场里的"地盘":

  • 公有成员就像摆在摊位上的商品,所有顾客都可以自由购买。
  • 私有成员就像藏在小房间里的私人物品,只有摊主自己才能使用。

1.2 示例

Example1: 公有成员

go 复制代码
package main

import "fmt"

var name string = "小叮当" // 公有变量

func sayHello() {
  fmt.Println("Hello,", name) // 可以访问公有变量
}

func main() {
  sayHello()
}

Output:

Hello, 小叮当

解析:

  • name 是一个公有变量,在同一个包内的所有函数都可以访问它。
  • 函数 sayHello() 可以访问 name 变量,因为它们都在同一个包内。

Example 2:私有成员

go 复制代码
package main

import "fmt"

type Person struct {
  name string // 私有成员
  age int
}

func (p Person) sayHello() {
  fmt.Println("Hello, 我的名字是", p.name) // 可以访问私有成员
}

func main() {
  p := Person{name: "小叮当", age: 10}
  //p.name = "Go" // 无法访问私有成员
  p.sayHello()
}

Output:

Hello, 我的名字是小叮当

解析:

  • name 是 Person 类型的一个私有成员,只有 Person 类型的方法才能访问它。
  • 函数 sayHello() 是 Person 类型的方法,它可以访问 name 变量。
  • 在 main() 函数中,无法直接访问 p.name 变量,因为它是一个私有成员。

1.3 总结

  • 包作用域是 Go语言中一个重要的概念,它可以帮助我们更好地组织代码。
  • 公有成员可以让其他包的代码访问,而私有成员只能在本包内使用。
  • 理解包作用域可以帮助我们避免代码冲突和错误。

不追求山顶的景色,享受攀登的过程,让我们期待下面学习。

相关推荐
Data_Journal1 天前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
豆角焖肉1 天前
SSM 聚合项目搭建:多 Maven 模块项目
开发语言·python·pycharm
Frank_refuel1 天前
【C++八股】面向对象
开发语言·c++
m0_380743871 天前
为 OpenAI 兼容接口配置教程
开发语言·python·node.js
凤山老林1 天前
Spring Boot 3.x AOT 编译实战:从原理、踩坑到生产落地
java·spring boot·后端
博傅1 天前
Spring 核心原理
java·后端·spring
万邦科技Lafite1 天前
阿里巴巴拍立淘按图搜索商品API返回值实践:提升用户购物满意度的关键措施
开发语言·api·开放api·电商开放平台·京东开放平台
用户938515635071 天前
掘金风格后端数据库设计实战:从用户表到分布式架构,一文搞定
后端·sql
拾光师1 天前
Hadoop 三种运行模式:从单机调试到生产集群,一路搭过来
后端
小小龙学IT1 天前
Qt 6 跨平台开发完全指南:从信号槽机制到实际项目落地
开发语言·qt