如何理解这段代码 的interface 用法?

今天下了 gcss (https://github.com/yosssi/gcss)学习一下开源的go 代码,但是对以下这段代码不理解 ,求指教。

    // element represents an element of GCSS source codes.
type element interface {
    io.WriterTo
    AppendChild(child element)
    Base() *elementBase
    SetContext(*context)
    Context() *context
}

// newElement creates and returns an element.
func newElement(ln *line, parent element) (element, error) {
    var e element
    var err error
    switch {
case ln.isComment():
    e = newComment(ln, parent)
case ln.isAtRule():
    e = newAtRule(ln, parent)
case ln.isMixinDeclaration():
    // error can be ignored becuase the line is checked beforehand
    // by calling `ln.isMixinDeclaration()`.
    e, _ = newMixinDeclaration(ln, parent)
case ln.isMixinInvocation():
    // error can be ignored becuase the line is checked beforehand
    // by calling `ln.isMixinInvocation()`.
    e, _ = newMixinInvocation(ln, parent)
case ln.isVariable():
    e, err = newVariable(ln, parent)
case ln.isDeclaration():
    e, err = newDeclaration(ln, parent)
default:
    e, err = newSelector(ln, parent)
}
 }

element 是个interface ,interface 能用来声明变量吗?如以下的 : parent element 或者 var e element 。 不懂这个怎么理解 。我所知道的interface 的用法是这样的:

type Test interface{
    SayHi() string 
}

type Person struct {
    name string 
}

func (p *Person)SayHi() string {

}

对go是初学者的水平 ,求教各位了。

共 4 个回复


sparon

不是声明变量,表示该函数可接受参数类型为element类型。

# 0

yeelone

@sparon 那这一句呢: var e element ?
element 是个interface,element 类型是什么类型,这样子有什么样的用意呢?

# 1

yeelone

我明白了,这是接口类型断言。 用法参考链接:http://stackoverflow.com/questions/19279954/conditional-variable-declaration-in-golang 定义可搜索 接口类型断言。

# 2

stevewang

var e element是定义一个类型为element的变量。

# 3