跟着google工程师学Go语言(十三):Golang包和封装

欢迎来到:Google资深工程师深度讲解Go语言

视频地址:Google资深工程师深度讲解Go语言 - 包和封装

封装
  • 名字一般使用CamelCase(首字母大写)
  • 首字母大写:public
  • 首字母小写:private
  • 每个目录一个包
  • main包包含可执行入口
  • 为结构定义的方法必须放在同一个包内
  • 可以是不同文件
  • -

像 fmt、os 等这样具有常用功能的内置包在 Go 语言中有 150 个以上,它们被称为标准库,大部分(一些底层的除外)内置于 Go 本身。完整列表可以在 Go Walker 查看。

unsafe: 包含了一些打破 Go 语言“类型安全”的命令,一般的程序中不会被使用,可用在 C/C++ 程序的调用中。

  • syscall-os-os/exec:

    os: 提供给我们一个平台无关性的操作系统功能接口,采用类Unix设计,隐藏了不同操作系统间差异,让不同的文件系统和操作系统对象表现一致。

    os/exec: 提供我们运行外部操作系统命令和程序的方式。

    syscall: 底层的外部包,提供了操作系统底层调用的基本接口。

    archive/tar 和 /zip-compress:压缩(解压缩)文件功能。

  • fmt-io-bufio-path/filepath-flag:

    fmt: 提供了格式化输入输出功能。

    io: 提供了基本输入输出功能,大多数是围绕系统功能的封装。

    bufio: 缓冲输入输出功能的封装。

    path/filepath: 用来操作在当前系统中的目标文件名路径。

    flag: 对命令行参数的操作。

  • strings-strconv-unicode-regexp-bytes:

    strings: 提供对字符串的操作。

    strconv: 提供将字符串转换为基础类型的功能。

    unicode: 为 unicode 型的字符串提供特殊的功能。

    regexp: 正则表达式功能。

    bytes: 提供对字符型分片的操作。

    index/suffixarray: 子字符串快速查询。

  • math-math/cmath-math/big-math/rand-sort:

    math: 基本的数学函数。

    math/cmath: 对复数的操作。

    math/rand: 伪随机数生成。

    sort: 为数组排序和自定义集合。

    math/big: 大数的实现和计算。

  • container-/list-ring-heap: 实现对集合的操作。

    list: 双链表。

  • time-log:

    time: 日期和时间的基本操作。

    log: 记录程序运行时产生的日志,我们将在后面的章节使用它。

  • encoding/json-encoding/xml-text/template:

    encoding/json: 读取并解码和写入并编码 JSON 数据。

    encoding/xml:简单的 XML1.0 解析器,有关 JSON 和 XML 的实例请查阅第 12.9/10 章节。

    text/template:生成像 HTML 一样的数据与文本混合的数据驱动模板(参见第 15.7 节)。

  • net-net/http-html:

    net: 网络数据的基本操作。

    http: 提供了一个可扩展的 HTTP 服务器和基础客户端,解析 HTTP 请求和回复。

    html: HTML5 解析器。

runtime: Go 程序运行时的交互操作,例如垃圾回收和协程创建。

reflect: 实现通过程序运行时反射,让程序操作任意类型的变量。

|–queue
|–entry
|–main.go //执行入口main
|–queue.go //队列

代码:queue.go

package queue

type Queue []int

func (q *Queue)Push(v int)  {
    *q = append(*q,v)
}

func (q *Queue)Pop() int  {
    head := (*q)[0]
    *q = (*q)[1:]
    return head
}

func (q *Queue)IsEmpty() bool {
    return len(*q) == 0
}

main.go

package main

import (
    "go学习/queue"
    "fmt"
)

func main() {
    q := queue.Queue{1}

    q.Push(2)
    q.Push(3)
    fmt.Println(q.Pop())
    fmt.Println(q.Pop())
    fmt.Println(q.IsEmpty())
    fmt.Println(q.Pop())
    fmt.Println(q.IsEmpty())
}

输出结果:

1
2
false
3
true

Go入门指南:

猜你喜欢

转载自blog.csdn.net/u010363932/article/details/81714608