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提倡的,短作用域尽量用少的字符命名变量?
1
ifsclimbing 2020-06-24 00:44:48 +08:00
r 也能理解
|
2
poplar50 2020-06-24 00:47:09 +08:00 via Android
赞同楼主
|
3
Pythondr 2020-06-24 00:47:36 +08:00 via iPhone 1
Golang 提倡的,对于作用域小的局部变量提倡使用单个字符作为变量名
|
5
EminemW OP @ifsclimbing #1
``` func router01() http.Handler { e := gin.New() e.Use(gin.Recovery()) e.GET("/", func(c *gin.Context) { c.JSON( http.StatusOK, gin.H{ "code": http.StatusOK, "error": "Welcome server 01", }, ) }) return e } ``` 像这个 e:= gin.New() 呢 |
6
tonyaiken 2020-06-24 01:00:17 +08:00
不易阅读
|
7
iplayio2019 2020-06-24 01:10:21 +08:00 via Android
第一层循环用 v,第二层循环用 vv 。各种数据就是 data 。V.V
|
8
neoblackcap 2020-06-24 01:12:00 +08:00
golang 官方问题推崇的风格就是这样,循环啥的小作用域都用单变量,反正代表外部不用太关心这个变量。其实这里的 main 函数也是一样。你就是创建一个 router 然后注册对应的 handler 。这个事实也没什么关系,又不用传到别的地方去
|
9
cmdOptionKana 2020-06-24 01:36:23 +08:00 via Android
golang 保留了 C 语言的一些习惯,但基本上都有它的道理,没有大问题。
|
10
also24 2020-06-24 01:47:13 +08:00 20
|
12
lxml 2020-06-24 02:57:14 +08:00 via Android
看标准库就知道了,准确来说是,这个作用域比较短,十几行以内的用单字母缩写,因为没有什么歧义,作用域比较长的,跨几个函数或者单函数比较大的,还是会用全称。
|
13
mlboy 2020-06-24 05:57:08 +08:00 via iPhone 1
这正是符合规范,golang 就是提倡你的变量长度根据你的使用率决定,
|
14
Weny 2020-06-24 06:20:04 +08:00 via iPhone
一开始确实会有一些不习惯 后面就是一直缩写一直爽 hhh
|
16
mxalbert1996 2020-06-24 08:17:24 +08:00
楼主先区分一下单词和字母。。。
|
18
dog82 2020-06-24 08:29:53 +08:00
i - index / iterator
r - result / router l - list a - array ret- return …… |
19
pkaq 2020-06-24 08:31:39 +08:00
楼主先区分一下单词和字母。。。
|
20
kaiki 2020-06-24 08:41:02 +08:00
不是拼音八级都看不懂你的代码.jpg
|
22
yzk66880 2020-06-24 09:55:30 +08:00
golang 就这德行。。。
|
23
siteshen 2020-06-24 10:02:49 +08:00
恐怕问题不在变量 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() |
24
tiedan 2020-06-24 10:04:08 +08:00
写业务的时候建议不要这样缩写
|
25
Pythondr 2020-06-24 10:38:59 +08:00
|
26
cmdOptionKana 2020-06-24 10:46:58 +08:00
@siteshen 确实这样改了之后更清晰。不过鉴于现代化 IDE/编辑器已经很普及了(根据 Go 官方调查,绝大部分人都用 vscode 和 goland ),可轻松查看类型,所以不改问题也不大,改了更好。
|
27
hellodudu86 2020-06-24 11:17:31 +08:00
如果 import 了一个 router 包,再 router.就容易混淆了
|
28
no1xsyzy 2020-06-24 12:32:45 +08:00
@also24 #10 计数用 c,累加用 s,累乘用 p 或者 q,文件名 fn,打开的文件 fp
长度可能是 n ( NOIP 一堆长度为 n,因为大 O 基本都是 n ),第二个长度就是 m 四维数组 wxyz uv mapping,连专业术语都是随便找的字母 |
29
Vegetable 2020-06-24 12:36:28 +08:00
个人认为这种 10 行业内的变量,语义化变量名不是必须的,简洁同样重要。
别忘了他时有类型信息的,*gin.Engine 也是信息。 |
31
ifsclimbing 2020-06-24 12:52:07 +08:00
@EminemW 你这是故意的
|
32
iamwho 2020-06-24 12:59:28 +08:00
先不说规不规范,估计楼主只看了 quick start,下面的 api example 应该是还没看就发帖了。
|
35
neoblackcap 2020-06-24 14:01:43 +08:00
@siteshen Default 不是仅仅返回一个 Router,它还自带了一些 Middleware,所以才是 Default,如果只是要一个干净的 router,那么还得用 New
|
36
siteshen 2020-06-28 09:37:34 +08:00
@neoblackcap 我的回复只是说明 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.」 |