Golang Go语言中gin官方文档示例代码变量命名为何用单个单词
Golang Go语言中gin官方文档示例代码变量命名为何用单个单词
package main
import “github.com/gin-gonic/gin”
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
“message”: “pong”,
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
其中
r := gin.Default()
改成
router := gin.Default()
是不是更有助于理解呢
更多关于Golang Go语言中gin官方文档示例代码变量命名为何用单个单词的实战教程也可以访问 https://www.itying.com/category-94-b0.html
r 也能理解
更多关于Golang Go语言中gin官方文档示例代码变量命名为何用单个单词的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
赞同楼主
Golang 提倡的,对于作用域小的局部变量提倡使用单个字符作为变量名
#3 的确在 Golang 的官方教程中,也有大量出现单个字符做变量名
不易阅读
第一层循环用 v,第二层循环用 vv 。各种数据就是 data 。V.V
golang 官方问题推崇的风格就是这样,循环啥的小作用域都用单变量,反正代表外部不用太关心这个变量。其实这里的 main 函数也是一样。你就是创建一个 router 然后注册对应的 handler 。这个事实也没什么关系,又不用传到别的地方去
golang 保留了 C 语言的一些习惯,但基本上都有它的道理,没有大问题。
怪不得 debug 变量会起这些名字😂
看标准库就知道了,准确来说是,这个作用域比较短,十几行以内的用单字母缩写,因为没有什么歧义,作用域比较长的,跨几个函数或者单函数比较大的,还是会用全称。
这正是符合规范,golang 就是提倡你的变量长度根据你的使用率决定,
一开始确实会有一些不习惯 后面就是一直缩写一直爽 hhh
#5 e 是 engine 的首字母
楼主先区分一下单词和字母。。。
debug 亮了,笑出声~
i - index / iterator
r - result / router
l - list
a - array
ret- return
……
楼主先区分一下单词和字母。。。
不是拼音八级都看不懂你的代码.jpg
golang 就这德行。。。
恐怕问题不在变量 r,而是在 API gin.Default 上,听过没用过 gin 的根本不知道 Default 返回值是什么。
r := gin.DefaultRouter() 这样是不是就比较容易懂了?(没看过 gin 源码,姑且认为返回的是叫 Router 的东西)
给几个我觉得不错的 API 命名供参考:
net/http.DefaultServeMux
github.com/go-chi/chi.NewRouter()
github.com/gorilla/mux.NewRouter()
确实这样改了之后更清晰。不过鉴于现代化 IDE/编辑器已经很普及了(根据 Go 官方调查,绝大部分人都用 vscode 和 goland ),可轻松查看类型,所以不改问题也不大,改了更好。
如果 import 了一个 router 包,再 router.就容易混淆了
个人认为这种 10 行业内的变量,语义化变量名不是必须的,简洁同样重要。
别忘了他时有类型信息的,*gin.Engine 也是信息。
#29 10 行以内
你这是故意的
先不说规不规范,估计楼主只看了 quick start,下面的 api example 应该是还没看就发帖了。
那到不至于,我还看了 example 项目
#23 这样的确看一眼就懂了
我的回复只是说明 gin 框架没有按照 go 官方推荐的方式组织代码,按我的设想,应该用 NewRouter,DefaultRouter 等含义更清晰的函数名。详细解释如下:
按 go 的官方规范,有区分度的结构体应该是由最后一层 package + struct name
组成。举例如下: http.Router, rpc.Request, websocket.Message, router.New(), mux.Default() (其中一些是现编的)等,还有上面有人提到的 gin.Middleware, gin.Engine (虽然不知道 Engine 具体是什么,但可以猜测是某种实体)。
而 gin.New(), gin.Default() 等的返回值是什么?参照对 router.New(), message.New() (分别返回 Router / Message )等的理解,应该是返回一个叫「 Gin 」的东西,而 Gin 是什么呢?我的理解是一个框架,框架名作为实体?这样的代码读起来就很困惑了。
问题出在哪呢? New / Default 不带有任何实体标识符,而实体由 package + structname
确定,既然不能用 struct name 来表示类型, 那就应该用 package 的最后一层来表示了。但 gin 这里没有,导致了一部分人对 gin.New(), gin.Default() 这样的代码不明所以。
如果 go 官方代码有最后一层 package + struct name
仍然定义不清晰的,欢迎打脸。
https://blog.golang.org/package-names 「 Go code is organized into packages. Within a package, code can refer to any identifier (name) defined within, while clients of the package may only reference the package’s exported types, functions, constants, and variables. Such references always include the package name as a prefix: foo.Bar refers to the exported name Bar in the imported package named foo.」
在Golang(又称Go语言)中,gin框架的官方文档示例代码倾向于使用单个单词作为变量名,这一做法有其特定的原因和优势,主要体现在以下几个方面:
-
简洁明了:单个单词的变量名通常更加简洁,能够快速传达变量的用途或类型,便于阅读和理解代码。
-
一致性:在官方文档中,使用统一的命名风格(如单个单词)有助于保持代码示例的一致性,降低读者的认知负担。
-
遵循惯例:Go语言社区普遍倡导简洁、直接的命名方式,单个单词的变量名符合这一惯例,有助于代码风格的统一。
-
避免命名冲突:在较短的代码示例中,使用单个单词的变量名可以减少命名冲突的可能性,使得代码更加紧凑和易于维护。
-
便于复制粘贴:对于初学者或需要快速上手gin框架的开发者来说,简洁的变量名使得示例代码更加便于复制粘贴和修改,以适应具体的应用场景。
当然,在实际项目中,变量名的选择应根据具体情况而定。对于复杂逻辑或关键变量,使用更具描述性的命名(可能是多个单词组成的短语)可能会更加合适。但在gin官方文档这样的示例代码中,为了保持简洁性和易读性,使用单个单词作为变量名是一个合理的选择。