Golang语法查询[重复]

问题描述 投票:0回答:1

我最近正在研究 Thorsten Ball 的“用 Go 编写解释器”,并遇到了这种语法

program.Statements[0].(*ast.ExpressionStatement)
。任何人都可以 ELI5 这是在做什么吗?附加背景:

type Program struct {
    Statements []Statement
}

type Statement interface {
    Node
    statementNode()
}

type Node interface {
    TokenLiteral() string
    String() string
}
go syntax
1个回答
-1
投票

假设

program
属于
Program
类型,
program.Statements[0]
属于
Statement
类型,因此
program.Statements[0].(*ast.ExpressionStatement)
断言它确实是
*ast.ExpressionStatement
,否则会使程序出现恐慌。

你可以写

    s := program.Statements[0]
    es := s.(*ast.ExpressionStatement)

而不是

    es := program.Statements[0].(*ast.ExpressionStatement)
© www.soinside.com 2019 - 2024. All rights reserved.