Golang 封装

Golang 封装

封装的定义是将数据封装在一个单一的单元中。它是将代码和它所操作的数据绑定在一起的机制。从另一个角度来说,封装是一个保护罩,可以防止数据被这个保护罩外的代码访问。

Golang中的封装

在面向对象的语言中,一个类的变量或数据被隐藏起来,不被任何其他类所发现,只能通过它们所声明的自己的类的任何成员函数来访问。但是Go语言不支持类和对象。因此,在Go语言中,封装是通过使用包来实现的。Go语言提供两种不同类型的标识符,即导出的和未导出的标识符。封装是通过从包中导出的元素(变量、函数、方法、字段、结构)实现的,它有助于控制元素(变量、函数、方法、字段、结构)的可见性。如果定义这些元素的包在你的程序中可用,那么这些元素就是可见的。

1.出口标识符: 出口标识符是那些从定义它们的包中导出的标识符。这些标识符的第一个字母总是用大写字母。这个大写字母表示给定的标识符是导出的标识符。输出的标识符总是被限制在它们被定义的包中。当你从包中导出指定的标识符时,你只需导出名称而不是该标识符的实现。这种机制也适用于函数、字段、方法和结构。

例子

// Go program to illustrate
// the concept of encapsulation
// using exported function
package main
  
import (
    "fmt"
    "strings"
)
  
// Main function
func main() {
  
    // Creating a slice of strings
    slc := []string{"GeeksforGeeks", "geeks", "gfg"}
  
    // Convert the case of the
    // elements of the given slice
    // Using ToUpper() function
    for x := 0; x < len(slc); x++ {
  
        // Exported Method
        res := strings.ToUpper(slc[x])
  
        // Exported Method
        fmt.Println(res)
    }
}

输出

GEEKSFORGEEKS
GEEKS
GFG

解释: 在上面的例子中,我们通过从strings包中导出ToUpper()函数将slice中的元素的大小写转换为大写。

res := strings.ToUpper(slc[x])

这里,ToUpper()函数的第一个字母是大写的,这表明这个函数是导出的函数。如果你试图将ToUpper()函数的大小写改为小写,那么编译器将给出一个错误,如下所示。

res := strings.toUpper(slc[x])

Output:
./prog.go:22:9: cannot refer to unexported name strings.toUpper
./prog.go:22:9: undefined: strings.toUpper

所以,这个过程(导出变量、字段、方法、函数、结构)被称为封装。由于封装,我们在程序中只导出了函数的名称,而不是整个函数的定义,ToUpper()函数的定义被包裹在strings包中,所以为了导出ToUpper()函数,你首先需要在程序中导入strings包。

2.未导出的标识符: 未导出的标识符是那些没有从任何包中导出的标识符。它们总是用小写字母表示。如下面的例子所示,加法函数与任何包都没有关系,所以它是一个未导出的函数,这个方法的可见性只限于这个程序中。

例子

// Go program to illustrate
// the unexported function
package main
  
import "fmt"
  
// The addition function returns
// the sum of the elements
// Unexported function
func addition(val ...int) int {
    s := 0
  
    for x := range val {
        s += val[x]
    }
  
    fmt.Println("Total Sum: ", s)
    return s
}
  
// Main function
func main() {
  
    addition(23, 546, 65, 42, 21, 24, 67)
}

输出

Total Sum:  788

封装的好处

  • 向用户隐藏实现细节。
  • 增加代码的可重用性。
  • 它可以防止用户任意设置函数的变量。它只由同一包中的函数设置,并且该包的作者确保该函数保持其内部不变性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程