jnml'nin yanıtına bakarak, Base türünü hiç dışa aktarmadan (yani, küçük harfle yazarak) Base örneğinin yeni örneklerini önleyebilirsiniz. Gerekirse, bu arayüz Üs başa dışarıdan fonksiyonlarda kullanılabilir, böylece bir taban türünü döndüren bir yöntem olan verilebilir bir arayüz yapmak yani edebilir
package a
type base int
const (
A base = iota
C
T
G
)
type Baser interface {
Base() base
}
// every base must fullfill the Baser interface
func(b base) Base() base {
return b
}
func(b base) OtherMethod() {
}
package main
import "a"
// func from the outside that handles a.base via a.Baser
// since a.base is not exported, only exported bases that are created within package a may be used, like a.A, a.C, a.T. and a.G
func HandleBasers(b a.Baser) {
base := b.Base()
base.OtherMethod()
}
// func from the outside that returns a.A or a.C, depending of condition
func AorC(condition bool) a.Baser {
if condition {
return a.A
}
return a.C
}
Ana paketin içinde a.Baser
şimdi bir enum gibi etkili. Sadece bir paketin içinde yeni örnekler tanımlayabilirsiniz.
türünü kontrol etmelidir. Http://golang.org/pkg/os/#pkg-constants –
ile ilgili: http: // stackoverflow.com/questions/14236263/ne zaman yapılmalı ne zaman-bir-yap-türü-başka-tip-ve-ne-it-it-sadece- – lbonn
[Golang: Sabit Tip oluşturma ve Kısıtlama Türün Değerleri] (http://stackoverflow.com/questions/37385007/golang-creating-a-constant-type-and-restricting-the-types-values) – icza