封装在戈朗
封装被定义为将数据包装在一个单元下。它是将代码及其操作的数据绑定在一起的机制。从另一个角度来说,封装是一个保护屏障,防止数据被这个屏障之外的代码访问。
在面向对象语言中,一个类的变量或数据对任何其他类都是隐藏的,只能通过声明它们的自己类的任何成员函数来访问。但是 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
说明:在上面的例子中,我们通过从字符串包中导出 ToUpper() 函数,将 slc 切片的元素大小写转换为大写。
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()函数的定义被包装在字符串包中,因此要导出 ToUpper()函数,首先需要在程序中导入字符串包。
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
封装的好处:
- 对用户隐藏实现细节。
- 增加代码的可重用性。
- 它防止用户任意设置函数的变量。它只由同一个包中的函数设置,该包的作者确保函数保持它们的内部不变量。
版权属于:月萌API www.moonapi.com,转载请注明出处