码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • golang编译器提示Exported method with the unexported return type(公开、私有类型的用途)


    关于公开和私有类型

    在Go语言中,如果一个方法的名字首字母大写,则该方法是公开的(或称为已导出的),可以在包外部被访问和调用。如果一个方法的名字首字母小写,则该方法是私有的(或称为未导出的),只能在包内部访问和调用。

    同理,如果一个类型的名字首字母大写,则该类型是公开的(或称为已导出的),可以在包外部被访问和使用。如果一个类型的名字首字母小写,则该类型是私有的(或称为未导出的),只能在包内部访问和使用。

    因此,一个公开的方法(即首字母大写的方法名)可以使用未导出的(即首字母小写的)类型作为返回值。例如:

    package example
    
    // 定义一个未导出的类型
    type user struct {
        Name string
    }
    
    // 定义一个公开的方法,返回类型为未导出的user
    func NewUser(name string) user {
        return user{Name: name}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在上面的例子中,我们定义了一个未导出的类型user,并定义了一个公开的方法NewUser,该方法的返回类型为未导出的user类型。这样,在包外部,就可以通过调用NewUser来创建一个新的user实例,例如:

    package main
    
    import (
        "fmt"
    
        "example"
    )
    
    func main() {
        u := example.NewUser("John")
        fmt.Println(u.Name)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    上面的代码中,我们在包外部调用了example.NewUser方法来创建一个新的user实例。由于NewUser方法是公开的,所以可以在包外部调用;但是,由于user类型是未导出的,所以无法在包外部直接使用,只能通过调用NewUser方法返回的实例来访问user类型的公开属性user.Name。

    是否属于错误写法?有什么用途?

    这实际属于一种安全机制,包外部无法直接使用私有类型,但是可以通过公开的方法将私有类型作为返回值暴露出去。这样,可以为包外部提供一个访问私有类型的入口,同时保护私有类型不被包外部随意使用。

    所以,在idea工具中出现Exported method with the unexported return type这中提示时,需要思考这种写法是否符合你的代码逻辑与需求。

  • 相关阅读:
    Qt6.2LTS官方文档综述翻译学习
    ModuleNotFoundError: No module named ‘_ssl‘
    【一周安全资讯1118】北京高院发布《侵犯公民个人信息犯罪审判白皮书》;工银金融勒索案的事件响应服务商MoxFive是谁?
    新书速览|解密AI绘画与修图: Stable Diffusion+Photoshop
    Sovit3D数字孪生平台 助力智慧海上风电场项目加速
    Mysql集群及高可用-并行复制5
    【opencv450-samples】图像分割grabcut算法
    mapbox使用marker创建html点位信息
    SwiftUI 视图“毁坏性”和“非毁坏性”刷新的应用场景
    python多条曲线拟合成一条
  • 原文地址:https://blog.csdn.net/dorlolo/article/details/128212932
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号