Golang 包

Golang 包

包是Go语言中最强大的部分。包的目的是设计和维护大量的程序,将相关的功能组合成单一的单元,使它们能够易于维护和理解,并独立于其他包的程序。这种模块化使它们能够共享和重复使用。在Go语言中,每个包都被定义了一个不同的名字,而且这个名字与它们的功能很接近,比如 “字符串 “包,它包含了只与字符串相关的方法和函数。

重要观点

1.导入路径: 在Go语言中,每个包都由一个独特的字符串定义,这个字符串被称为导入路径。在导入路径的帮助下,你可以在你的程序中导入包。比如说。

import "fmt"

这句话说明你正在你的程序中导入一个 fmt 包。包的导入路径是全球唯一的。为了避免与标准库以外的包的路径发生冲突,包的路径应该以拥有或托管该包的组织的互联网域名开始。例如。

import "geeksforgeeks.com/example/strings"

2.包声明: 在Go语言中,包声明总是出现在源文件的开头,这个声明的目的是为了在该包被其他包导入时确定其默认标识符。比如说。

package main

3.导入声明: 导入声明紧跟在包声明之后。Go源文件包含零个或多个导入声明,每个导入声明都在括号内指定一个或多个包的路径。比如说

// Importing single package
import "fmt"

// Importing multiple packages
import(
"fmt"
"strings"
"bytes"
) 

当你在你的程序中导入一个包时,你被允许访问该包的成员。例如,我们有一个名为 “sort “的包,所以当你在程序中导入这个包时,你可以访问sort.Float64s()、sort.SearchStrings()等该包的函数。

4.空白导入: 在Go编程中,有时我们会在程序中导入一些包,但我们并没有在程序中使用它们。当你运行这类包含未使用的包的程序时,那么编译器会给出一个错误。因此,为了避免这种错误,我们在包的名称前使用一个空白标识符。比如说。

import _ "strings"

它被称为空白导入。它被用于许多或某些场合,当主程序可以在编译时启用空白导入附加包所提供的可选功能时。

5.嵌套包: 在Go语言中,你可以通过创建一个子目录在另一个包内创建一个包。嵌套包可以像根包一样导入。比如说。

import "math/cmplx"

这里,数学包是主包,cmplx包是嵌套包。

6. 有时一些包可能有相同的名字,但这种类型的包的路径总是不同。例如,数学包和密码包都包含一个名为rand的包,但这个包的路径不同,即math/rand和crypto/rand。

7. 在Go编程中,为什么主包总是出现在程序的顶部?因为主包告诉go build,它必须激活链接器来制作一个可执行文件。

给包起名

在Go语言中,当你为一个包命名时,你必须始终遵循以下几点。

  • 当你创建一个包的时候,包的名字必须是简短的。例如strings, time, flag等都是标准的库包。
  • 包的名称应该是描述性的和不含糊的。
  • 总是尽量避免选择常用的或用于局部相对变量的名称。
  • 包的名称一般采用单数形式。有时一些包的名字是复数形式,如字符串、字节、缓冲区等。因为要避免与关键词的冲突。
  • 一定要避免已经有其他内涵的包名。比如说。

例子

// Go program to illustrate the
// concept of packages
// Package declaration
package main
  
// Importing multiple packages
import (
    "bytes"
    "fmt"
    "sort"
)
  
func main() {
  
    // Creating and initializing slice
    // Using shorthand declaration
    slice_1 := []byte{'*', 'G', 'e', 'e', 'k', 's', 'f',
        'o', 'r', 'G', 'e', 'e', 'k', 's', '^', '^'}
    slice_2 := []string{"Gee", "ks", "for", "Gee", "ks"}
  
    // Displaying slices
    fmt.Println("Original Slice:")
    fmt.Printf("Slice 1 : %s", slice_1)
    fmt.Println("\nSlice 2: ", slice_2)
  
    // Trimming specified leading
    // and trailing Unicode points
    // from the given slice of bytes
    // Using Trim function
    res := bytes.Trim(slice_1, "*^")
    fmt.Printf("\nNew Slice : %s", res)
  
    // Sorting slice 2
    // Using Strings function
    sort.Strings(slice_2)
    fmt.Println("\nSorted slice:", slice_2)
}

输出

Original Slice:
Slice 1 : *GeeksforGeeks^^
Slice 2:  [Gee ks for Gee ks]

New Slice : GeeksforGeeks
Sorted slice: [Gee Gee for ks ks]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程