Go语言初识--标识符 可见性

发布于:2025-07-23 ⋅ 阅读:(17) ⋅ 点赞:(0)

Go语言初识–标识符 可见性

和C语言相似,go语言的基本组成有:

  1. 包声明,编写源文件时,必须在非注释的第一行指明这个文件属于哪个包,如package main。
  2. 引入包,其实就是告诉Go 编译器这个程序需要使用的包,如import "fmt"其实就是引入了fmt包。
  3. 函数,和c语言相同,即是一个可以实现某一个功能的函数体,每一个可执行程序中必须拥有一个main函数。
  4. 变量,Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
  5. 语句/表达式,在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
  6. 注释,和c语言中的注释方式相同,可以在任何地方使用以 // 开头的单行注释。以 /* 开头,并以 */ 结尾来进行多行注释,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。

标识符

标识符(Identifier)是程序中用来命名实体(如变量、函数、类型、常量、结构体字段等)的名字。在 Go 语言中,标识符的命名遵循以下规则:

  1. 组成部分

    • 标识符由字母、数字和下划线 _ 组成。
    • 标识符的第一个字符必须是字母(a-zA-Z)或下划线 _,不能是数字。

    例如:

    var valid1 int    // 合法
    var 1invalid int  // 不合法,不能以数字开头
    var _validName int // 合法
    
  2. 大小写

    • 大写字母开头的标识符被认为是 导出 的(即在其他包中可见)。
    • 小写字母开头的标识符是 未导出 的,只能在当前包内访问。

Go 语言中的可见性规则(导出与未导出):

1. 导出标识符(Exported Identifier)

  • 大写字母开头的标识符可以被外部包访问,也就是说,这种标识符对外部包是 可见的
  • 这与其他语言中的 public 类似,例如 Java 或 C++ 中的公共成员。

示例

// 定义一个结构体和函数,结构体字段和函数名首字母大写,表示它们是导出的
package mypackage

// 导出字段
type MyStruct struct {
    Name string
}

// 导出函数
func MyFunction() {
    fmt.Println("This is a public function!")
}

在这个示例中,MyStruct 结构体和其字段 Name,以及 MyFunction 函数都可以被外部包使用:

package main

import "mypackage"

func main() {
    var s mypackage.MyStruct
    s.Name = "Hello"  // 可以访问 Name 字段,因为它是导出的
    mypackage.MyFunction()  // 可以调用 MyFunction,因为它是导出的
}
  • MyStructMyFunction导出 的,因为它们的名字以大写字母开头,其他包可以直接访问它们。

2. 未导出标识符(Unexported Identifier)

  • 小写字母开头的标识符未导出 的,只能在定义它的包内访问,外部包无法直接访问。
  • 这类似于其他语言中的 privateprotected 成员。

示例

package mypackage

// 未导出字段
type MyStruct struct {
    name string // 小写字母开头,表示未导出
}

// 未导出函数
func myFunction() {
    fmt.Println("This is a private function!")
}

在这个示例中,MyStructname 字段和 myFunction 函数都是 未导出 的,它们只能在 mypackage 包内部使用,其他包无法访问:

package main

import "mypackage"

func main() {
    var s mypackage.MyStruct
    s.name = "Hello"  // 错误:无法访问未导出的字段 'name'
    mypackage.myFunction()  // 错误:无法调用未导出的函数 'myFunction'
}
  • 由于 name 字段和 myFunction 函数都是小写字母开头,表示它们是 未导出 的,外部包无法访问。

总结:

  1. 标识符组成:Go 中的标识符由字母、数字和下划线组成,但首字符必须是字母或下划线。

  2. 导出和未导出

    • 大写字母开头的标识符(如 MyStructMyFunction)是 导出的,可以被外部包访问。

    • 小写字母开头的标识符(如 namemyFunction)是 未导出的,只能在当前包内访问。

    • 导出:类似于其他语言中的 public,表示对外部可见。

    • 未导出:类似于其他语言中的 private,表示对外部不可见。

为什么这个规则很重要?

  1. 封装性:Go 使用这种规则来实现封装,只暴露给外部包必要的功能,而隐藏包内部的实现细节。
  2. API 设计:通过将某些函数和类型字段标记为 导出未导出,你可以更清晰地设计包的公共接口,并防止外部包访问不该访问的内部实现。

网站公告

今日签到

点亮在社区的每一天
去签到