今天和一个小伙伴偶尔聊了两句,聊到现在工作的开发语言,大学时接触的第一个语言应该是html,系统且简单的学习了前端语言,之后伴随着学校的课程,C++、C#、Java都有涉及,然后就一直已Java为主了,也是在今年,有机会做go语言开发,现在算是java/go双语言开发了。
但go语言自学没一周就开始做go项目了,截止今天有四个月左右了,该专栏却迟迟没有新文章收入,今天就聊聊我这段时间学习+总结的一些Go语言开发规范吧
废话不多说,直接开始干货
本规范制定主要用于开发以及代码review 时进行参考,保证代码开发的一致性与规范性
//
或者 /**/
其中前者适合单行注释,后者适合注释的正文应该以被注释的内容作为开头,例如
// Request represents a request to run a command.
type Request struct { ...
// Encode writes the JSON encoding of req to w.
func Encode(w io.Writer, req *Request) { ...
注释文本应该以点号结束(方便godoc导出),参考上面例子
包内任一文件内写即可,注释的位置放在package 前面且之间 不可以有空行
// Package regexp implements a simple library
// for regular expressions.
package regexp
(即大写开头的变量或者函数)
【可选】注释应该位于import 和文件内代码之间的部分,例如
import (
"fmt"
"github.com/golang/protobuf/proto"
"github.com/op/go-logging"
)
/*
文件级别的注释
This file implement the API of consensus
which can be invoked by outer services.
*/
// package-level logger
var logger *logging.Logger
func init() {
logger = logging.MustGetLogger("consensus/pbft")
}
</code>
命名的规范性包括普通变量、结构体、指针类型等。
package pbft
pbft_proto.go
type Reader interface {
Read(p []byte) (n int, err error)
}
type WriteFlusher interface {
Write([]byte) (int, error)
Flush() error
}
owner := obj.Owner()
if owner != user {
obj.SetOwner(user)
}
func (rr *roundRobin) watchAddrUpdates() error {...}
if err := file.Chmod(0664); err != nil {
return err
}
f, err := os.Open(name)
if err != nil {
return err
}
d, err := f.Stat()
if err != nil {
f.Close()
return err
}
codeUsing(f, d)
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
for key, value := range oldMap {
newMap[key] = value
}
sum := 0
for _, value := range array {
sum += value
}
for key := range m {
if key.expired() {
delete(m, key)
}
}
open /etc/passwx: no such file or directory
这种 <动作 + 操作对象 + 错误提示>
的方式比较推荐type error interface {
Error() string
}
// PathError records an error and the operation and
// file path that caused it.
type PathError struct {
Op string // "open", "unlink", etc.
Path string // The associated file.
Err error // Returned by the system call.
}
// 1. unkown error
switch s := suit(drawCard()); s {
case "Spades": //...
case "Hearts": //...
case "Clubs": //...
default:
panic(fmt.Sprintf("INVALID suit %q", s))
}
// 2. key init
var user = os.Getenv("USER")
func init() {
if user == "" {
panic("no value for $USER")
}
}
鄙人有常年累月收集各种资料的习惯,最近正在整合内容,后续会统一放到公众号 鲲志说 上,想要的大佬可以关注获取,如果有需要的资料,但我暂时没有,也可以留言,我会去找
- 深入浅出Go语言的众多关键特性,并提供大量场景示例,对于刚接触或转型Go编程的读者是一本很友好的上手指南。
- 涉及内容新颖而广泛,包括语法结构、面向对象、并发编辑、上下文机制、网络编程、Go汇编以及流行框架等。
- 不仅讲解Go语言的编程方法与开发技巧,而且力图解读Go语言的设计思想,带领读者探究Go语言的本质。
- 三位作者都是一线长期使用Go语言的资深开发人,他们的经验是本书质量的保证,希望各位读者能通过阅读本书收获更多
《深入浅出Go语言核心编程》是一本全面而深入的Go语言学习手册,涵盖了Go语言的诸多关键特性,包括语法结构、内存原理、并发、上下文机制与框架应用等。
本书共20章。第1章引导读者快速搭建开发环境,详细介绍Go语言的环境配置及编译运行的具体细节。第2~5章详细讨论Go语言独特的变量、常量、常用数据类型和流程控制,并重点解析复杂类型的底层实现机制。第6~8章讲解Go语言的函数及如何实现面向对象编程,打通Go语言面向过程和面向对象编程之间的桥梁。第9~12章探讨Go语言的一些高级话题,包括并发、上下文、反射、泛型等。第13~15章探讨Go语言的I/O、网络编程及RPC通信等编程场景。第16~18章是Go语言的扩展话题,涵盖了内存管理、正则表达式和Go语言的汇编。第19章和第20章重点探讨了Go语言在日常开发中的典型应用,主要介绍HTTP框架Gin的使用,以及如何利用Go语言开发一个综合项目。
《深入浅出Go语言核心编程》内容丰富,由浅入深,既适合初次接触Go语言的新手,也适合有一定经验的软件开发人员阅读。
————————————————
本次本篇文章送书 1本 评论区抽1位小伙伴送书
活动时间:截止到 2023-12-21 19:00:00
抽奖方式:利用网络公开的在线抽奖工具进行抽奖
参与方式:关注、点赞、收藏,评论 “从入门到入狱,GoGoGo”
————————————————
注:活动结束后,会私信中奖粉丝的,各位注意查看私信哦!
小伙伴也可以访问链接进行自主购买哦~
直达京东购买链接:《深入浅出Go语言核心编程》
- 好看的灵魂千篇一律,有趣的鲲志一百六七!
- 如果觉得文章还不错的话,可以点赞+收藏+关注 支持一下,鲲志的主页 还有很多有趣的文章,欢迎小伙伴们前去点评
- 如果有什么需要改进的地方还请大佬指出❌