原文地址是 https://go.dev/ref/spec#PrimaryExpr
原文内容是
PrimaryExpr =
Operand |
Conversion |
MethodExpr |
PrimaryExpr Selector |
PrimaryExpr Index |
PrimaryExpr Slice |
PrimaryExpr TypeAssertion |
PrimaryExpr Arguments .
Selector = "." identifier .
Index = "[" Expression "]" .
Slice = "[" [ Expression ] ":" [ Expression ] "]" |
"[" [ Expression ] ":" Expression ":" Expression "]" .
TypeAssertion = "." "(" Type ")" .
Arguments = "(" [ ( ExpressionList | Type [ "," ExpressionList ] ) [ "..." ] [ "," ] ] ")" .
其中我关心的是 Arguments 的定义,它表示为 ( ExpressionList | Type [ "," ExpressionList ] )
ExpressionList 很容易理解,它可以匹配 (1,2,string(1)) 这样的文本,但是 Type [ExpressionList] 怎么理解呢,我从来没见过在 go 里可以写 var v = func_call(TypeName) 这样的表达式
(在上面引用的文本中,[ ] 包裹的内容表示为可选, | 表示匹配其中一个)