Go 未报告的结构最佳实践?(戈林抱怨)

Go 未报告的结构最佳实践?(戈林抱怨),go,Go,我有以下包裹: package mypkg type ( // mystruct ... mystruct struct { S string } ) // New .. func New() *mystruct { return &mystruct{S: "test"} } 我这样使用它: package main import ( "fmt" "test/mypkg" ) func main() { x

我有以下包裹:

package mypkg

type (
    // mystruct ...
    mystruct struct {
        S string
    }
)

// New ..
func New() *mystruct {
    return &mystruct{S: "test"}
}
我这样使用它:

package main

import (
    "fmt"
    "test/mypkg"
)

func main() {
    x := mypkg.New()
    fmt.Println(x.S)
    // this fails intended
    y := mypkg.mystruct{S: "andre"}
    fmt.Println(y.S)
}
为什么golint抱怨我的未报告结构?我的意图是防止在构造函数调用之外调用结构创建。 有没有其他方法可以防止在没有新调用的情况下实例化?

main.main()中的
x:=mypkg.New()
甚至不能有任何类型。它甚至不应该编译。它不能用了。在我看来,更有意义的是

package mypkg
type (
    // mystruct ...
    mystruct struct {
        S string
    }
)
type HaveS interface{ //which you can use but can't instantiate
    GetS() string
}
func (strct *mystruct ) GetS() string {return strct.S}
// New ..
func New() HaveS {
    return &mystruct{S: "test"}
}
那么大体上

var x mypkg.HaveS
x = mypkg.New()
fmt.Println(x.GetS())
main.main()中的
x:=mypkg.New()
甚至不能有任何类型。它甚至不应该编译。它不能用了。在我看来,更有意义的是

package mypkg
type (
    // mystruct ...
    mystruct struct {
        S string
    }
)
type HaveS interface{ //which you can use but can't instantiate
    GetS() string
}
func (strct *mystruct ) GetS() string {return strct.S}
// New ..
func New() HaveS {
    return &mystruct{S: "test"}
}
那么大体上

var x mypkg.HaveS
x = mypkg.New()
fmt.Println(x.GetS())

来自golint的消息/警告是什么?我认为这是因为您从不同的包
main
调用了一个未报告的结构,而不是它在中定义的包。基本上,它说的是删除调用或导出结构。golint的消息/警告是什么?我认为这是因为您从不同的包
main
调用未导出的结构,而不是它在中定义的包。基本上是说删除调用或导出结构。