Golang Go语言中询问下这个语法是否存在

发布于 1周前 作者 songsunli 来自 Go语言

原文地址是 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) 这样的表达式

(在上面引用的文本中,[ ] 包裹的内容表示为可选, | 表示匹配其中一个)


Golang Go语言中询问下这个语法是否存在

更多关于Golang Go语言中询问下这个语法是否存在的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

定义接口的时候可以吧参数名省略 直接写类型

更多关于Golang Go语言中询问下这个语法是否存在的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


额 感觉是我理解错了 确实没见过。。不知道参数定义算不算参数语法表达式

var action = func(context.Context)

是这样的吗? 这个语法是可行的

ast 解析时,type 和表达式是不怎么区分的,new(int)里 int 可以是类型也可能被重新定义为一个变量。真正的语义需要在 Go/types 包处理。

欢迎关注《 Go 语言定制指南》 https://github.com/chai2010/go-ast-book

在Go语言中,由于您没有提供具体的语法示例,我无法直接判断您所提到的语法是否存在。不过,我可以分享一些通用的方法和原则来帮助您确认Go语言中的语法有效性。

  1. 查阅官方文档:Go语言的官方文档是确认语法是否存在的最佳资源。您可以在Go官方文档中查找相关的语法描述和示例。

  2. 使用IDE或编辑器插件:许多现代的IDE和代码编辑器都提供了Go语言的支持,包括语法高亮、自动补全和错误检查。这些工具可以帮助您快速识别语法错误。

  3. 编写和运行代码:尝试编写包含您所询问的语法的代码,并使用go rungo build命令来编译和运行它。如果编译器报错,那么很可能该语法不存在或您使用的方式不正确。

  4. 搜索社区和论坛:在Stack Overflow、GitHub Issues或Go语言的社区论坛中搜索您所询问的语法。其他开发者可能已经遇到过类似的问题,并分享了解决方案。

  5. 阅读开源代码:浏览一些开源的Go语言项目,看看其他开发者是如何使用Go语言的。这不仅可以帮助您了解Go语言的最佳实践,还可以让您接触到各种语法和编程模式。

如果您能提供具体的语法示例,我将能够更准确地回答您的问题。

回到顶部