Golang中Slice命名使用重复字母的技巧

Golang中Slice命名使用重复字母的技巧 我观看了Brian Ketelsen的一场演讲,他在演讲中建议使用重复的字母来表示切片。

例如:

var tt []*Thing

我不确定这是否是一个好主意。在我的例子中,我正在编写一个HTTP处理程序,用于获取URL参数"message"。所以,我的代码如下所示:

func handlePut(w http.ResponseWriter, r *http.Request) {
	mm, ok := r.URL.Query()["message"]
	if !ok || len(mm) != 1 {
		http.Error(w, "", http.StatusBadRequest)
		return
	}
	m := mm[0]
        ...

我不觉得这种命名方式是合适的。我想,如果我使用 messagesmessage 这样的名称,代码可能会更具可读性。有人能给我一些建议吗?


更多关于Golang中Slice命名使用重复字母的技巧的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

我倾向于使用 -s 后缀来表示某个事物是一个集合。

更多关于Golang中Slice命名使用重复字母的技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


通过查看 golang/go 源代码树中的一个随机文件,lookup.go,似乎有很多地方使用了 -s 后缀。通常当我看到一个 tt 标识符时,它标识的是一个测试表。

我赞同olavfosse的观点;对我来说,使用s后缀比重复字符更有意义。我认为在西班牙语中,重复字符来表示复数并不少见(例如,我认为Estados Unidos(“美国”)会变成“EEUU”)。

我也喜欢你说的直接用messages这个想法。在Go语言中,使用短变量名是一种惯用做法,我个人也遵循这个准则,但仅限于那些能在一个“屏幕”内显示完整代码的小型函数,并且整个函数中变量很少的情况。

在Go语言中,使用重复字母命名切片(如 tt 表示 []*Thing)是一种常见的约定,特别是在局部变量或短作用域中,可以简化代码并保持一致性。然而,在HTTP处理程序等需要清晰表达业务逻辑的场景中,使用更具描述性的名称(如 messagesmessage)确实能提高可读性。以下是两种方式的示例,你可以根据具体上下文选择:

示例1:使用重复字母(适合简单局部操作)

func handlePut(w http.ResponseWriter, r *http.Request) {
    // tt 表示 []string 类型的切片
    tt, ok := r.URL.Query()["message"]
    if !ok || len(tt) != 1 {
        http.Error(w, "Invalid parameter", http.StatusBadRequest)
        return
    }
    t := tt[0] // t 表示单个字符串
    // 使用 t 进行后续处理
    fmt.Fprintf(w, "Message: %s", t)
}

示例2:使用描述性名称(推荐用于业务逻辑)

func handlePut(w http.ResponseWriter, r *http.Request) {
    // messages 明确表示多个消息的切片
    messages, ok := r.URL.Query()["message"]
    if !ok || len(messages) != 1 {
        http.Error(w, "Missing or multiple 'message' parameter", http.StatusBadRequest)
        return
    }
    message := messages[0] // message 表示单个消息
    // 使用 message 进行后续处理
    fmt.Fprintf(w, "Received message: %s", message)
}

在实际项目中,建议优先考虑代码的可读性和维护性。如果团队或项目已有命名规范,遵循现有约定即可。

回到顶部