zoukankan      html  css  js  c++  java
  • go:结构体的可访问性

    1.要使某个符号对其他包( package)可见(即可以访问),需要将该符号定义为以大写字母开头------摘自go相关书籍
    2.go只限制包内外的可访问性,而不限制同包内不同文件的可访问性

    本文讨论结构体三个部分的可访问性:结构体本身、结构体变量、结构体变量的成员变量

    在讨论某一部分时,保证其它部分包外可访问。

    1. 结构体本身   的可访问性

      test1.go:

    package tt
    type Test struct {
    	X int
    } 

      main.go:

    package main
    import (
    	"fmt"
    	"tt"
    )
    var a = &tt.Test{X: 5}
    func main() {
    	fmt.Println(a)
    }
    //编译成功,输出:
    //    &{5}
    

      若将test1.go中的结构体"Test"改为"test",则编译错误,提示"test"不可访问。  

      注:修改"Test"时同时修改main.go相关代码,后续测试中默认进行修改,不再强调。

      结论:结构体名的大小写影响结构体本身的可访问性,首字母小写则包外不可见(如定义结构体"test",则不能在包外定义"test"类型的结构体变量

    2.结构体变量

      test1.go

    package tt
    type Test struct {
    	X int
    }
    var t Test
    

      main.go

    package main
    import (
    	"fmt"
    	"tt"
    )
    func main() {
    	fmt.Println(tt.t)
    }
    

      编译错误,提示tt.t不可访问;将结构体变量"t"改为"T"后,程序正常运行,输出  {0}

      结论:同上,结构体变量名的首字母大小写   将影响其在包外的可访问性。

    3.结构体变量的成员变量

      1)不同包

      test1.go

    package tt
    type test struct {
    	x int
    }
    var T test

      main.go

    package main
    import (
    	"fmt"
    	"tt"
    )
    func main() {
    	fmt.Println(tt.T.x)
    }
    

      编译错误,提示tt.T.x不可访问;将T成员变量"x"改为"X"后,程序正常运行,输出  0  

      结论:同上。

      2)同包

    package main
    import (
    	"fmt"
    )
    type test struct {
    	x int
    }
    func main() {
    	t := new(test)
    	fmt.Println(t.x)
    }
    

      程序正常运行,输出  0。

      结论:同包内,结构体变量的成员变量可随时被访问,不受首字母大小写的影响(即便成员变量小写,也可被直接访问,而不需要通过成员函数来实现)。 

      

     

      

      

  • 相关阅读:
    Django——不同版本
    04爬取拉勾网Python岗位分析报告
    24 两两交换链表中的节点
    UniGUI学习之UniImage(39)
    Delphi7开发简单文件传输
    Javaday03(补充day02运算符,流程控制)
    java中代码块,构造方法和普通方法的代码执行顺序
    +=隐式类型转换
    关于switch中的default
    Java操作JSON数据(5)--jettison操作JSON数据
  • 原文地址:https://www.cnblogs.com/xiaopipi/p/4955861.html
Copyright © 2011-2022 走看看