Go语言doc

news2024/10/6 12:21:59

1、Go语言doc

go doc 命令可以打印附于 Go 语言程序实体上的文档,我们可以通过把程序实体的标识符作为该命令的参数来

达到查看其文档的目的。

所谓Go语言的程序实体,是指变量、常量、函数、结构体以及接口,而程序实体的标识符即是代表它们的名称。

标识符又分非限定标识符和限定标识符,其中,限定标识符一般用于表示某个代码包中的程序实体或者某个结构体

类型中的方法或字段。

下面说明怎样使用 go doc 命令,先来看一下 go doc 命令可接受的标记。

标记名称标记描述
-c加入此标记后会使 go doc 命令区分参数中字母的大小写,默认情况下,命令是大小写不敏感的。
-cmd加入此标记后会使 go doc 命令同时打印出 main 包中的可导出的程序实体(其名称的首字母大写)的文档。默认情况下,这部分文档是不会被打印出来的。
-u加入此标记后会使 go doc 命令同时打印出不可导出的程序实体(其名称的首字母小写)的文档。默认情况下,这部分文档是不会被打印出来的。

这几个标记的意图都非常简单和明确,大家可以根据实际情况选用。

go doc 命令可以后跟一个或两个参数。当然,我们也可以不附加任务参数。如果不附加参数,那么 go doc 命

令会试图打印出当前目录所代表的代码包的文档及其中的包级程序实体的列表。

// go-doc/loadgen/loadgen.go
package loadgen

import (
	"fmt"
)

// 定义接口
type Phone interface {
	call()
	call2()
}

// 定义结构体
type Phone1 struct {
	id            int
	name          string
	category_id   int
	category_name string
}

// 第一个类的第一个回调函数
func (test Phone1) call() {
	fmt.Println("这是第一个类的第一个接口回调函数,结构体数据:", Phone1{id: 1, name: "浅笑"})
}

// 第一个类的第二个回调函数
func (test Phone1) call2() {
	fmt.Println("这是一个类的第二个接口回调函数,结构体数据:", Phone1{id: 1, name: "浅笑", category_id: 4, category_name: "分类名称"})
}

// 第二个结构体
type Phone2 struct {
	member_id       int
	member_balance  float32
	member_sex      bool
	member_nickname string
}

// 第二个类的第一个回调函数
func (test2 Phone2) call() {
	fmt.Println("这是第二个类的第一个接口回调函数call", Phone2{member_id: 22, member_balance: 15.23, member_sex: false, member_nickname: "浅笑18"})
}

// 第二个类的第二个回调函数
func (test2 Phone2) call2() {
	fmt.Println("这是第二个类的第二个接口回调函数call2", Phone2{member_id: 44, member_balance: 100, member_sex: true, member_nickname: "陈超"})
}

例如,我要在 go-doc 项目的 loadgen 代码包所在目录中运行 go doc命令的话,那么就会是这样:

# loadgen目录下执行
# 程序输出
$ go doc
package loadgen // import "proj/loadgen"

type Phone interface{ ... }
type Phone1 struct{ ... }
type Phone2 struct{ ... }

如果你需要指定代码包或程序实体,那么就需要在 go doc 命令后附上参数了。例如,只要我本地的 go-doc 项目

的所在目录存在于GOPATH环境变量中,我就可以在任意目录中敲入 go doc loadgen。如此得到的输出一定是与

上面那个示例一致的。

# go-doc目录下执行
# 程序输出
$ go doc loadgen
package loadgen // import "proj/loadgen"

type Phone interface{ ... }
type Phone1 struct{ ... }
type Phone2 struct{ ... }

该代码包中的函数 call、call2 是不可导出,但是我们只需附加 -u 标记便可查看它的文档了:

# go-doc目录下执行
$ go doc -u loadgen.call
package loadgen // import "proj/loadgen"

func (test Phone1) call()
    第一个类的第一个回调函数

func (test2 Phone2) call()
    第二个类的第一个回调函数

下面再进一步,如果你只想查看 loadgen.Phone1 类型的 call 方法的文档,那么只要续写这个限定标识符就可以

了,像这样:

# go-doc目录下执行
$ go doc -u loadgen.Phone1.call
package loadgen // import "proj/loadgen"

func (test Phone1) call()
    第一个类的第一个回调函数

注意,结构体类型中的字段的文档是无法被单独打印的。另外,go doc 命令根据参数查找代码包或程序实体的顺

序是:先Go语言根目录(即GOROOT所环境变量指定的那个目录)后工作区目录(即GOPATH环境变量包含的那

些目录)。并且,在前者或后者中,go doc 命令的查找顺序遵循字典序。因此,如果某个工作区目录中的代码包

与标准库中的包重名了,那么它是无法被打印出来的。go doc 命令只会打印出第一个匹配的代码包或程序实体的

文档。

go doc 命令还可以接受两个参数,这是一种更加精细的指定代码包或程序实体的方式。一个显著的区别是,如果

你想打印标准库代码包 net/http 中的结构体类型 Request 的文档,那么可以这样敲入 go doc 命令:

$ go doc http.Request

当你指定两个参数时,作为第一个参数的代码包名称必须是完整的导入路径,即:在敲入命令go doc net/http

Request后,你会得到想要的结果。

$ go doc net/http Request

最后,在给定两个参数时,go doc 会打印出所有匹配的文档,而不是像给定一个参数时那样只打印出第一个匹配

的文档。这对于查找只有大小写不同的多个方法(如 New 和 new)的文档来说非常有用。

其它的使用:

$ go doc fmt
$ go doc fmt Printf
$ go doc os File
# 如果我们不但想在文档中查看可导出的程序实体的声明,还想看到它们的源码,那么我们可以在执行godoc命令的时候加入标记-src
$ go doc -src fmt Printf
# 在实际的Go语言环境中,我们可能会遇到一个命令源码文件所产生的可执行文件与代码包重名的情况。比如,这里介绍的标准命令go和官方代码包go。现在我们要明确的告诉godoc命令要查看可执行文件go的文档,我们需要在名称前加入cmd/前缀。
$ go doc cmd/go

2、godoc

godoc 在 go1.1.13 版本后已从核心包中移除,如果仅仅是看某个API,可以直接用 go doc。

godoc 安装:

$ go install golang.org/x/tools/cmd/godoc@latest

godoc 的使用:

$ godoc --help
usage: godoc -http=localhost:6060
  -goroot string
        Go root directory (default "D:\\OwnerSoftwareInstall\\Go")
  -http string
        HTTP service address (default "localhost:6060")
  -index
        enable search index
  -index_files string
        glob pattern specifying index files; if not empty, the index is read from these files in sorted order
  -index_interval duration
        interval of indexing; 0 for default (5m), negative to only index once at startup
  -index_throttle float
        index throttle value; 0.0 = no time allocated, 1.0 = full throttle (default 0.75)
  -links
        link identifiers to their declarations (default true)
  -maxresults int
        maximum number of full text search results shown (default 10000)
  -notes string
        regular expression matching note markers to show (default "BUG")
  -play
        enable playground
  -templates string
        load templates/JS/CSS from disk in this directory
  -timestamps
        show timestamps with directory listings
  -url string
        print HTML for named URL
  -v    verbose mode
  -write_index
        write index to a file; the file name must be specified with -index_files
  -zip string
        zip file providing the file system to serve; disabled if empty

启动执行:

# go-doc目录下执行
$ godoc -http=:6060

访问网址:

http://localhost:6060

在这里插入图片描述

开启搜索索引:

# 要使用-index标记开启搜索索引
# 在启动的时候添加-index参数
$ godoc -http=:6060 -index

全文本搜索结果显示条目的最大数量可以通过标记 -maxresults 提供,标记 -maxresults 默认值是10000。如果

不想提供如此多的结果条目,可以设置小一些的值。甚至,如果不想提供全文本搜索结果,可以将标记

-maxresults 的值设置为0。

因为在使用了 -index 标记的情况下文档服务器会在启动时创建索引,所以在文档服务器启动之后还不能立即提供

搜索服务,需要稍等片刻。在索引为被创建完毕之前,我们的搜索操作都会得到提示信息:

Indexing in progress: result may be inaccurate

我们演示搜索 printf:

在这里插入图片描述

如果我们想要访问自己本地代码生成的文档,可以使用 -goroot 参数:

$ godoc -goroot="......\go_lang_workspace" -http=:6060

访问:

在这里插入图片描述
在这里插入图片描述

也可以生成线下 html 文件,的具体方法为:

$ godoc -url "http://localhost:6060/pkg/" > doc.html

3、在线文档

在线文档地址:https://pkg.go.dev/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDBC 和数据库连接

JDBC 和数据库连接 基本介绍 JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。JDBC的基本原理图[重要&#xff…

CSDN 个性化推荐系统的设计和演进

个性化推荐项目 个性化推荐的设计和演进项目概览项目梳理依赖管理实现代码的重构和改进持续演化 个性化推荐的设计和演进 CSDN 的个性化推荐系统,是从既有的推荐项目中剥离出来的一个子项目,这个项目随后移交到了我们AI组。在近一年的时间内&#xff0c…

机器学习实战|第5周|第3章:无监督学习与数据预处理|3.3降维|16:00~17:55

目录 一、降维的动机 (1)数据压缩 (2)数据可视化 (3)降维的弊端 二、什么是维度的诅咒? 三、数据集被降维后能否逆转 四、降维的主要方法 (1)投影 (2)流形学习 五、PCA PCA可以用来给高度非线性数据集降维吗? 假设在一个1000维数据集上执行P…

最优化理论中的惩罚函数法:概念、推导和应用

目录 1. 引言 2. 惩罚函数法的概念 2.1 惩罚函数法的基本思想 2.2 惩罚函数的定义 2.2.1 符号性质 2.2.2 惩罚性质 2.2.3 连续性质 2.3 惩罚函数法的推导 2.4 惩罚函数法的特点 2.4.1 灵活性 2.4.2 通用性 2.4.3 近似解 2.4.4 收敛性 3. 推导过程 3.1 问题建模 …

Redis实战案例6-缓存穿透及其解决案例

1. 缓存穿透 缓存穿透是指在缓存中查找一个不存在的值,由于缓存一般不会存储这种无效的数据,所以每次查询都会落到数据库上,导致数据库压力增大,严重时可能会导致数据库宕机。 解决方案: 方法一:缓存空对象…

【Python】异常处理 ② ( 捕获所有类型的异常 | 默认捕获所有类型异常 | 捕获 Exception 异常 )

文章目录 一、Python 默认捕获所有类型异常1、默认捕获所有类型异常 - 无法获取异常类型2、代码实例 - 默认捕获所有类型异常 二、Python 捕获所有类型异常 - 捕获 Exception 异常1、捕获 Exception 类型异常 - 可获取异常类型2、代码实例 - 捕获 Exception 异常 一、Python 默…

猴子都能听懂的 从 0 到 1 设计一个网络

标题开玩笑了哈,大家不要介意,就是说本文真的超级大白话! 话不多说,开始整活! 你很爱玩电脑游戏,你买了一台电脑,就一个人自己玩,也不需要和谁沟通,不需要与别人联机&am…

数据库判断分解的无损连接性

例题 关系模式R(ABCDE),F{A->C,C->D,B->C,DE->C,CE->A} 若分解成R1(AD)R2(AB)R3(BC)R4(CDE)R5(AE)判断是否具有无损连接性 画出如下表格如第一行:AD,那么在A,D的地方填入,i表…

C++ Primer 第9章顺序容器

9.1 顺序容器概述 确定使用哪种顺序容器 通常使用vector是最好的选择 9.2 容器库概述(本节所有容器均适用) 对容器可以保存的元素类型的限制 有些类没有提供默认构造函数,我们可以定义一个这种类型对象的容器,但我们在构造这种容器时不能只传递给它一个数目参数. 9.2.1 迭…

MySQL进阶SQL语句(二)

MySQL进阶SQL语句(二) 一、MySQL进阶SQL语句1.1 连接查询1.2 CREATE VIEW视图,可以被当作是虚拟表或存储查询1.3 UNION 联集1.4 CASE1.5 空值(NULL) 和 无值() 的区别1.6 正则表达式 二、存储过程2.1 存储过程定义2.2 存储过程的优点2.3 存储…

(秋招)闭环检测流程回顾

vins中的闭环检测和重定位 回环检测的关键就是如何有效检测出相机曾经经过同一个地方,这样可以避免较大的累积误差,使得当前帧和之前的某一帧迅速建立约束,形成新的较小的累积误差。由于回环检测提供了当前数据与所有历史数据的关联&#xf…

快速搭建node.js新项目和大事件后台项目

声明:参考https://zhuanlan.zhihu.com/p/464271490?utm_id0 参考:https://brucecai55520.gitee.io/bruceblog/notes/nodejs/ev_api_server.html#_1-4-%E5%88%9D%E5%A7%8B%E5%8C%96%E8%B7%AF%E7%94%B1%E7%9B%B8%E5%85%B3%E7%9A%84%E6%96%87%E4%BB%B6%E5…

Linux文件系统的缓冲区问题

目录 一.什么是缓冲区? 1.1实验案例1: 情况1:运行该程序 情况2:此时我将该程序运行的结果输出重定向到一个文本文件中: 二.为什么要有缓冲区? 于是引出了缓冲区的刷新策略: 三.缓冲区在哪…

【学习笔记】 科目一之计算题篇

【学习笔记】 科目一之计算题篇 三点估算PERT 三点估算期望:(悲观+4*最可能+乐观)/6三点估算标准差:(悲观-乐观)/6正态分布四个数:34.1%,13.65%,2.1%,0.15%决策树 分叉计算注意:成本越小越好投资回报:收益-投入投资回报率(ROI)=收益-投入/投入投资回收期 静态回…

算法--PageRank

概念 PageRank是Google提出的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。是Google创始人拉里佩奇和谢尔盖布林于1997年创造的PageRank实现了将链接价值概念作为排名因素。 GOOGLE PageRank并不是唯一的链接相关的排名算法,而…

如何提升 MySQL 的查询速度?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言优化数据库结构1 使…

QT(一) 安装 QT(二)

第一章 : Qt 安装 下载地址安装 打开 cmd 运行镜像 : qt-unified-windows-x64-4.6.0-online.exe --mirror https://mirrors.aliyun.com/qt Hello 因为是qmake 所以是.proCtrl R 直接运行 第二章 GUI程序设计基础 main文件 *.ui : 有UI设计器自动生成…

【工具】Spring 历史官方文档理解(持续更新)

文章目录 [1] Spring Framework 5.2.24CoreAOP 概念AspectJoin pointAdvicePointcutIntroductionTarget objectAOP proxyWeaving Spring AOPAspectJ官方 demo 学习 Pointcut 表达式官方 demo 学习 Advice 声明官方 demo 学习 Introductions (接口拓展)AO…

0004Java程序设计-SSM+JSP医院挂号系统

摘 要 医院挂号,一直以来就是困扰医院提高服务水平的重要环节,特别是医疗水平高、门诊访问量高的综合型医院,门诊拥挤就成了普遍现象。因此,本文提出了医院挂号系统。预约挂号,是借助信息化的技术,面向全社…

代码随想录二刷 day32 | 贪心之 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

这里写目录标题 122.买卖股票的最佳时机II55. 跳跃游戏45.跳跃游戏II 122.买卖股票的最佳时机II 题目链接 解题思路: 首先要清楚两点: 只有一只股票!当前只有买股票或者卖股票的操作 想获得利润至少要两天为一个交易单元。 代码如下&#x…