2012-07-27 27 views
2

我是新来的,并开始玩A Tour of Go。我注意到一个特点即允许我仅举功能_但功能不能被称为:函数/结构/接口名称中允许使用哪些字符?

import "fmt" 

type sel struct { 
    s string 
} 

func _(s string) sel { 
    return sel{s} 
} 

func main() { 
    fmt.Println("Hello") 
    _("foo") // <-- does not compile 
} 

如果我评论了整个_("foo")线,则程序编译。

我的问题是函数名称中允许使用哪些字符?它只是字母数字字符还是我可以使用$例如?

是否命名其他东西的规则结构体,接口等与函数相同吗?

+0

有趣的是,虽然你问及如何命名,而不是为什么你不能使用下划线,你接受了解释后者的答案,而不是回答以前的答案,你的实际问题。请考虑切换或更改问题。 :) – Kissaki 2012-07-28 07:40:48

+0

@Kissaki好点,切换右回答!为了指出为什么要调用'_(s string)'不起作用,请给Nick一些额外的赞誉:) – 2012-07-28 17:58:25

回答

6

spec说,FUNC,var或const名必须用(unicode_letter_)开始,并可以有许多(unicode_letterunicode_digit_)结束。

unicode_letter如果您愿意,可以是中文或希伯来字母。

10

spec

空白标识符,通过下划线字符_表示,可以 在声明可以使用像任何其他标识符,但声明 不引入一个新的绑定。

这解释了为什么代码是有效的,但你不能调用函数调用_

_围棋时使用要为其指定一个变量,但忽略它。调用一个函数_的确如此 - 你定义了它,但编译器会忽略它。

相关问题