为什么 go 需要双引号导入声明

flu*_*ter 6 go

作为 Go 初学者,每当我开始一个新的源文件时,这总是让我着迷。所以go的package子句定义了包名,没有双引号,因为包名必须是标识符,不能包含空格之类的无效字符。但是,在导入声明时,包名必须双引号,因为包名正是包子句中使用的,所以它也必须是标识符(当然 / 可以作为分隔符)。在我看来,这只会增加更多的击键次数,而没有其他好处。我想知道为什么它是这样设计的,导入必须是双引号字符串。

此外,如果我们查看其他语言,#include <foo.h>, using System.Barimport java.lang.moo它们都不需要导入为字符串。

Pau*_*kin 6

路径a/b/foo更像是一个字符串而不是标识符:标识符没有分隔符,路径可能包含标识符中不允许的字符。你说包名不能包含空格,这是真的,但路径可以,就像包名不能包含句点 ( .),但路径可以。例如:

import "golang.org/x/exp/shiny/vendor/github.com/BurntSushi/xgb/render"`
Run Code Online (Sandbox Code Playgroud)

这与 C 大致相同,它在问题中被列为不使用字符串来指定#include路径,但与 go import 语句有相似之处。这两种形式都是字符串,如:#include <a/b/foo.h>#include "a/b/foo.h",虽然一个用途<>,而不是引号来分隔字符串。