2012-07-27 32 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

空白標識符,通過下劃線字符_表示,可以 在聲明可以使用像任何其他標識符,但聲明 不引入一個新的綁定。

這解釋了爲什麼代碼是有效的,但你不能調用函數調用_

_圍棋時使用要爲其指定一個變量,但忽略它。調用一個函數_的確如此 - 你定義了它,但編譯器會忽略它。

相關問題