登录
首页 >  Golang >  Go问答

关于 golang 的一个变量设计问题

来源:SegmentFault

时间:2023-02-23 20:37:35 268浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《关于 golang 的一个变量设计问题》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

刚入 golang,最近在写一个 http server。

我这里有一个全局的字符串类型的变量,它是线程安全的,所以我给了它一个互斥锁,同时新增了 Get/Set 函数来操作它,当然这两个函数也是线程安全的。为了防止后来者误用,我希望这个变量不要被直接使用,或者不要费事像下面这样用,

ProjectNameMutex.Lock()
defer ProjectNameMutex.Unlock()
ProjectName = name

我更希望他直接调用我提供的线程安全函数

GetProjectName()
,那么这个变量我如何“隐藏”呢?

我在注释里对这个变量做了说明,但我觉得这不够,需要在设计上给一个方法,希望有了解的大兄弟指点一下。

正确答案

你可以用闭包把你的变量隐藏起来

func NewProjectName() (func() string, func(string)) {
    var ProjectName string
    getProjectName := func() string {
        return ProjectName
    }
    setProjectName := func(name string) {
        ProjectName = name
    }

    return getProjectName, setProjectName
}

func main() {
    getProjectName, setProjectName := NewProjectName()
    setProjectName("hello")
    var str = getProjectName()
    fmt.Println(str)
}

只能通过 getProjectName, setProjectName 访问闭包里面的变量。

今天关于《关于 golang 的一个变量设计问题》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>