如何定义`const * DataType`

时间:2015-10-29 02:23:46

标签: go

我在Go中编写了一个Lisp变体,想要为NilEmptyList定义常量。这些将在整个代码库中引用,但我想防止它们被意外重新定义。

// Representation of the empty list
var EmptyList = (*List)(nil)

我在这里不能使用const有两个原因:

  1. const定义不能为nil
  2. const定义不能成为指针
  3. 我有哪些选项可以确保EmptyList始终是nil指针?

1 个答案:

答案 0 :(得分:1)

在Go中,使用一个功能。例如,

package main

import "fmt"

type List struct{}

func IsEmptyList(list *List) bool {
    // Representation of the empty list
    return list == (*List)(nil)
}

func main() {
    fmt.Println(IsEmptyList((*List)(nil)))
}

输出:

true

该功能将被内联。

$ go tool compile -m emptylist.go
emptylist.go:7: can inline IsEmptyList
emptylist.go:13: inlining call to IsEmptyList
emptylist.go:7: IsEmptyList list does not escape
emptylist.go:13: IsEmptyList((*List)(nil)) escapes to heap
emptylist.go:13: main ... argument does not escape
$