听峰问雨 听峰问雨
首页
导航站
  • 编程语言

    • Python
  • 数据结构与算法
  • 设计模式
  • UVA
  • LeetCode
  • 《Go语言实战》
  • 《Go Web编程》
  • 《算法精粹 经典计算机科学问题的Python实现》
  • 学习
  • 博客搭建
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
GitHub (opens new window)

zfprotectors

默默学习er
首页
导航站
  • 编程语言

    • Python
  • 数据结构与算法
  • 设计模式
  • UVA
  • LeetCode
  • 《Go语言实战》
  • 《Go Web编程》
  • 《算法精粹 经典计算机科学问题的Python实现》
  • 学习
  • 博客搭建
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
GitHub (opens new window)
  • 《Go语言实战》

    • Go语言的介绍
    • 快速开始一个Go程序-RSS匹配器
    • 打包和工具链
      • 包
      • 导入
        • 远程导入
        • 命名导入
      • init函数
      • Go工具
      • Go语言文档
      • 合作开发
      • 依赖管理
    • 数组,切片和映射
    • Go语言的类型系统
    • 并发
  • 《Go Web编程》

  • 《算法精粹 经典计算机科学问题的Python实现》

  • 读书笔记
  • 《Go语言实战》
zfprotectors
2022-05-26
目录

打包和工具链

# 包

所有 Go 语言的程序都会组织成若干组文件,每组文件被称为一个包。每个包都可以单独导入和使用,被其他项目引用。

  • 除了空行和注释,都应该在第一行声明自己所属的包。
  • 每个包都在一个单独的目录里。
  • 同一目录下,所有.go文件必须声明同一个报名。即不能把多个包放在同一目录中,也不能把同一个包放在不同的目录中。
  • 通常包的命名就是使用包所在目录的名字,应该使用简洁,全小写的英文名字,避免频繁切换大小写

所有Go语言编译的可执行程序都必须有一个叫main的包

main()函数是程序的入口,如果没有这个函数,程序无法开始执行。(和C语言一样)

# 导入

导入包需要使用关键字import,即告诉编译器需要引入该位置的包内的代码。

如果需要导入多个包,则需要将import语句包装在一个导入块中,例如:

import (
    "fmt"
    "strings"
)
1
2
3
4

编译器会使用Go环境变量设置的路径,通过引入相对路径来查找对应的包。

标准库中的包会在安装Go的位置找到,自定义的包会在GOPATH环境变量指定的目录里找。

例如,Go安装在/usr/local/go,GOPATH设置为/home/myproject:/home/mylibraries,编译器会按照下面顺序查找net/http包:

  1. /usr/local/go/src/pkg/net/http
  2. /home/myproject/src/net/http
  3. /home/mylibraries/src/net/http

# 远程导入

Go语言的工具链支持从版本控制(如Github)的网站中获取源代码。

import "github.com/spf13/viper"
1

在导入路径编译程序时,Go工具链会通过网络获取包的源代码,并保存到GOPATH与URL匹配的目录里。

这个获取过程可以使用go get命令完成。这个命令会扫描某个包的源码树,获取能找到的所有依赖包

# 命名导入

若出现重名的情况,可以通过命名导入来到解决重名的包。

命名导入是指,在import语句给出的包路径左侧定义一个名字,将导入的包命名为新名字。

import (
    "fmt"
    myfmt "mylib/fmt"
)
1
2
3
4
  1. 导入的包在下文中一定要被使用,否则会被编译错误
  2. 如果用户导入一个包,但是不需要引用这个包的标识符,这个时候可以使用空白标识符_来重命名这个导入。

提示

空白标识符:下划线字符(_),在Go语言里称为空白标识符,这个标识符用来抛弃不想继续使用的值,因此赋予一个空名字

# init函数

init函数会在程序执行开始的时候被调用,即会在main函数调用之前

作用:设置包,初始化变量,程序运行前优先完成的前导工作

# Go工具

  • go build:执行编译工作,默认是用当前目录来编译,build过程中可以使用通配符,3个点表示匹配所有的字符串。
go build github.com/goinaction/code/chapter3/...
1
  • go clean hello.go:执行清理工作,clean会删除编译生成的可执行文件
  • go run:先进行构建工作,然后执行构建后的程序
  • go vet:帮助开发人员检测常见的错误
    • Printf类函数调用时,类型匹配错误的参数
    • 定义常用的方法是,方法签名的错误
    • 错误的标签结构
    • 没有指定字段名的结构字面量
  • go doc:打印文档

# Go语言文档

// Retrieve连接到配置库,收集各种链接设置、用户名和密码。这个函数在成功时
// 返回 config 结构,否则返回一个错误。
func Retrieve() (config, error) {
    // ... 省略
}
1
2
3
4
5
  1. 函数的文档直接写在函数声明之前
  2. 如果包含大量的文档,可以在工程里包含一个doc.go的文件,使用同样的包名,并把包的介绍使用注释加在包声明之前

# 合作开发

  1. 包应该在代码库的根目录中
  2. 包可以非常小
  3. 对代码执行go fmt
  4. 给代码写文档

# 依赖管理

  • godep
  • vender
  • gopkg.in
  • gb
编辑 (opens new window)
#Go
上次更新: 2022/05/26, 12:36:19
快速开始一个Go程序-RSS匹配器
数组,切片和映射

← 快速开始一个Go程序-RSS匹配器 数组,切片和映射→

最近更新
01
LeetCode88 - 合并两个有序数组
06-22
02
LeetCode1 - 两数之和
06-22
03
LeetCode1603 - 设计停车系统
06-21
更多文章>
Theme by Vdoing | Copyright © 2021-2022 zfprotectors | 闽ICP备2021014222号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式