GO 文档笔记

前言

最开始写 GO 的时候, 发现方法的注释并不支持@param@return等参数, 搞得我都不知道该如何给自己的方法写文档说明了. 而且网上搜了搜也没有搜到教程, 甚是郁闷.

今天找到了GO内置的文档工具: godoc. (我用的1.14.3版本貌似不是自带工具了, 需要安装(配置代理): go get golang.org/x/tools/cmd/godoc)

运行命令: godoc -http=:8888. 可以直接在本地浏览器访问8888端口, 查看这个运行在本地的文档服务: localhost:8888. 能够看到所有官方包的文档. 而这些文档内容都是从官方代码包中读取的.

这个文档工具不光能够检测官方文档, 还能够检测自己的项目, 只要将项目配置到GOPATH下即可.

既然人家官方代码能生成文档, 那就说明是有文档生成格式的呀. 既然我不知道如何写文档, 抄官方的样式不就行了么? nice. 以下是我多处借鉴后, 总结的 GO 文档书写规则.

文档

经过测试, GO 的文档格式, 全局变量/常量/函数/结构体/接口/包等等, 声明格式都一样, 会读取对应内容上方紧跟着的注释内容. 所以就对文档格式统一介绍即可.

文档格式

书写格式

文档的书写影响其展示形式, 如下所示:

/*
这是一个展示文档作用的包.A 标题这里的标题为首字母大写, 且后面没有标点.
如果没有空行, 则文档不会换行.B标题二GO 的文档工具只识别首字母大写, 不识别中文, 有点难受.开头空格标识缩进*/
// 同时, 也可以写成多个单行注释的形式
package doc

展示形式:

对于包的说明文档, 因为包下每个文件都有package doc 这段代码, 如果包下有多个文件都对此包进行了说明, 文档会将所有说明拼接到一起. 可以单独建一个doc.go的空文件, 专门用来写包文档. (fmt 包就是这么搞的)

全局变量/常量/方法/结构体

全局变量/常量/方法/结构体等内容, 文档会对其进行归类, 只要将说明加到其上方即可. 简单写个常量看看, 其他同理:

// test const
const TestConst = "const"

示例代码

与写单元测试类似, 新建一个example_test.go文件. 在其中写 demo 函数, 会检测同名以Example开头的函数:

package docimport ("fmt"
)func ExampleDemoTest() {DemoTest()// OutPut:// 没有返回值
}// 多个 demo, 下划线后拼单词或数字
func ExampleDemoTest_2() {DemoTest()
}// 包 demo, 对于没有指定方法的, 会识别为这个包的例子
func Example() {fmt.Println("aaaa")// OutPut:// none
}// 包 demo2
func Example_2() {fmt.Println("bbb")
}

godoc检测示例代码:

文档关键字

那 GO 的注释中有没有文档用到的关键字呢? 有, 简单写几个.

BUG

可以对 bug 进行描述, godoc会自动识别并标识出来:

// BUG(hujing): 对 bug 的描述信息

Deprecated

已弃用的标识, 这个关键字看的太多了, 不过godoc并不会识别这个关键字, 主要是编译器识别.

// Deprecated: 请使用 DocDemoNew 方法

注意

  1. 文档注释与对应内容之间不能有空行.

  2. godoc只会对公共内容生成文档, 私有内容不会展示.


GO的文档还有更多, 这里只是简单的整理一下, 对于之后写项目基本够用了, 再也不会在写 GO 文档的时候懵逼了. GO 既然已经提供了godoc这么好的工具, 那写文档就更是义不容辞的工作了.

がんばる!!!

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

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

相关文章

长整数的乘法运算

概述 都知道, 计算机中存储整数是存在着位数限制的, 所以如果需要计算100位的数字相乘, 因为编程本身是不支持存储这么大数字的, 所以就需要自己实现, 当然了, 各个编程语言都有大数的工具包, 何必重复造轮子, 但我还是忍不住好奇他们是如何实现的, 虽然最终没有翻到他们的底层…

如何将数字转换成口语中的文本串

概述 今天突发奇想, 写一个将数字转换成中文字符串的函数. 并不是将 1234 转成 1234 , 而是将 1234 转成 一千二百三十四. 本来以为很简单, 写下来之后发现还是有些坑的. 尝试 因为我是在写完最终版本, 回过头来整理的这篇文章, 所以中间很多尝试的步骤会有所遗漏. 以下简单…

设计模式故事会

想着用讲故事的方式对各个设计模式进行一个稍微形象一些的描述. 当然, 某些因为没有想到特别好的例子, 可能比喻的并不是那么的恰当, 望赐教. 绞尽脑汁啊, 尽力贴近设计模式其本来的意图. 主要为了加强一些自己对设计模式的理解. 进入正题: 小王是一名心怀梦想的90后青年, 他独…

有了 elseif 为什么还要 switch case

引出 你有没有想过既然有了if elseif, 为什么还要设计一个switch case的语法出来呢? 按理说, 一个语言的设计角度来说, 关键词越少越好吧, 而且多出来一种选择分支也没有看出太大用处. 以下几种switch case均可以写成if else的形式(java 代码): // 形式一 switch(a){case 1:…

计算矩阵中全1子矩阵的个数

前言 最近被我大哥安利了一道算法题, 这道题说难, 还不至于我做不出来, 说简单吧, 我还想不到最优解, 等把最优解告诉我之后, 我还正好能理解. 我甚至曾经怯怯的认为, 这题就是我哥专门给我找的, 嘿嘿, 心中说不出的小欢喜. 题来了, 此题出自力扣, 原题链接: https://leetco…

GO 的方法集

前言 之前在写 GOdemo 的时候, 写了这么一段程序(大概意思): package maintype Test struct { }func (test *Test) print() {println("test fun") }func main() {Test{}.print() }结果一编译就报错了: cannot call pointer method on Test literal 差不多意思是不…

GO 切片实力踩坑

概述 GO 语言的切片这两天用了用, 可以支持切割数组的中间部分. 但今天使用中, 出了 bug, 查了半天, 发现是切片的问题, 简单写个 demo 复现当时的情况: package mainimport "fmt"func main() {a : []int{1, 2, 3, 4, 5}b : a[2:4]b[0] 9fmt.Println(a) }你以为输…

搭建本地 HTTPS 环境

前言 之前写自己的网站时, 申请过免费的https证书. 最近想在自己本地搭一个, 结果忘了当初证书是怎么来的了. 本来想着去申请个免费的证书, 但想了想, 我只需要在自己本地能使用就行了, 我自己的环境, 那当然是我说了算了. 只要能够将证书构造出来, 安装到本地就可以识别了. 搜…

《人人都是产品经理》读后感

之前读书, 一般看的都是技术、算法、数学、哲学这些方面的, 为什么突然想看这本书呢? 身为一个开发人员, 每天打交道最多的, 除了开发和测试, 就是产品了. 还记得我刚来公司的时候, 在和产品的沟通过程中, 听到最多的话估计就是: 你要懂产品, 你懂了就不会做错. 确实有很多需求…

nginx 端口转发

概述 这两天在写 go 项目, 一个 HTTP 服务器. 之前写的是 php 项目, nginx 监听80端口, 根据域名将请求分配给不同项目. 现在换了 go, 自然也想延续这个操作, 毕竟都是跑在同一台服务器上. 那么问题来了, 我的nginx 监听80端口的同时, go 服务器是无法同样监听80端口的. 这该如…

2020-08-20

前段时间有些迷茫, 有时看着自己写的代码感觉就像一坨屎, 有时写了一段逻辑总是感觉有问题, 测了一遍又一遍, 逻辑也要理好几次. 就像是进入了一种不可描述的状态, 这感觉让我很不自在. 敲代码的时间说长不长, 说短不短, 从大二开始, 到现在也小四年了, 还没有碰到过这种情况. …

beego 优雅重启

前言 最近在写 go 的项目, http 用的 beego 框架. 因为 go 不想 php, 每次代码改动都需要重启服务, 所以代码发上线之后, 如何重启服务就成了一个问题. 如果强行重启的话, 不光在重启期间的所有访问都被拒绝了, 而且在杀掉进程的时候处理中的请求也挂了. 对于一个向用户正常提…

由 go orm 引发的探索

前言 今天遇到了一个 bug, 是 golang 的orm导致的. 使用了gorm框架. 通过实现Scan与Value可以将数据库中的 json 内容解析出来, 免除了 字符串再解码的步骤. 当时报错的代码大概是这样的: type TestContent struct {Id intContent Content // 数据库中的 json 结构 }type Con…

MySQL 数据恢复

MySQL 数据恢复 前言 前两天因为没注意的误操作, 直接把某个数据表清掉了, 心慌慌. 怪自己学艺不精, 当时整了一下午也没把数据找回来. 当晚回来闭关研究, 终于在凌晨1点多整出来了, 特此记录, 以备不时之需. 对于 MySQL 数据的备份, 主要有两种: 全量备份和增量备份. 全量…

码云 Pages 搭建

因为一直在写博客, 就向着搭个 GithubPages 来展示, 一直都听说别人用它来搭建个人博客, 但一直停留在听说的阶段. 最近想着没事搞一搞, 也看看它到底是个什么东东. 不过咱一个写中文博客的, 就想着在码云上搭一个, 顺便还能被百度收录, 嘿嘿. 说干就干, 开搞. (Pages 服务只能…

crontab 指令笔记

前言 之前有个定时任务, 需要每天的9点和21点定时跑. 当时我是这么写的: 0 9 * * * XXX 0 21 * * * XXX当时经过高人指点, 发现这两条命令可以写成一条: 0 9,21 * * * XXX好羞耻… 于是, 我决定整理一篇crontab的语法. 防止下次再出现这尴尬的场景… 指令 命令行 crontab…

golang 多协程的同步方法总结

之前用 go 写一个小工具的时候, 用到了多个协程之间的通信, 当时随手查了查, 结果查出来一大坨, 简单记录一下. golang中多个协程之间是如何进行通信及数据同步的嘞. 共享变量 一个最简单, 最容易想到的, 就是通过全局变量的方式, 多个协程读写同一个变量. 但对同一个变量的更…

golang chan 探究

前言 之前在看golang多线程通信的时候, 看到了go 的管道. 当时就觉得这玩意很神奇, 因为之前接触过的不管是php, java, Python, js, c等等, 都没有这玩意, 第一次见面, 难免勾起我的好奇心. 所以就想着看一看它具体是什么东西. 很明显, 管道是go实现在语言层面的功能, 所以我以…

计算机网络-信道复用技术

还记得计算机网络中的信道复用技术么? 来来来, 一起复习一下. why 问: 什么是信道复用. 在回答这个问题之前先看这样一个场景: 其中u1 u2是两个用户, 如果这两个用户之间连通的信道在他们使用过程中, 被他们完全占用了, 其他人就只能等着了. 那有人说了, 那就多架设信道不就…

IP 数据报首部分析

来来来, 爷们. 不是一直说纸上得来终觉浅么. 今咱就抓个数据报具体看一看真实网络中的 IP 报首部. 操作方法很简单, 使用wireshark进行抓包. 抓包后随便找个包看一下就行, 毕竟所有通信的包都需要经过网络层.(同时, wireshark会对协议的相关信息给出标识, 更方便我们查看) 其中…