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。

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

  

 

  

  

时间: 2024-10-25 05:37:50

go:结构体的可访问性的相关文章

C语言中宏的运用------利用宏技术可以简化对某结构体变量的访问

利用宏技术可以简化对某结构体变量的访问 有时候,为了方便访问结构变量中的某个元素,我们可以利用宏去进行代码的替换. #include<stdio.h>#include<stdlib.h> struct data{ int len; int show;}; struct data Data;#define LEN Data.len  //为了访问而定义的宏 int main(){ LEN = 5; printf("%d\n",Data.len); Data.len

结构体的对齐访问

什么是结构体对齐访问(1)结构体中元素的访问其实本质上还是用指针方式,结合这个元素在整个结构体中的偏移量和这个元素的类型来进行访问的.(2)但是实际上结构体的元素的偏移量比较复杂,因为结构体要考虑元素的对齐访问,所以每个元素时间占的字节数和自己本身的类型所占的字节数不一定完全一样.(譬如char c实际占字节数可能是1,也可以是2,也可能是3,也可以能4····)(3)一般来说,我们用.的方式来访问结构体元素时,我们是不用考虑结构体的元素对齐的.因为编译器会帮我们处理这个细节.但是因为C语言本身

C语言之结构体以及结构体对齐访问

1:简单理解,结构体就是数组的进一步发展,数据的优点和缺陷在于数据里面是元素类型必须相同,但是结构体没有这个要求,结构体里面元素的类型可以相同也可以不同. 2:结构体的定义: struct student {     int age;     char name[20]; }s1; 上面这种方法是结构体定义的同时定义变量,结构体的定义有两部分组成 struct studen:结构体的类型 s1:类型为struct student的结构体变量,当然还可以用struct studet s2:l来定义

C语言--&gt;(十四)结构体、宏、编译

知识点: 1.结构体 struct 2.typedef关键字 3.宏的定义 4.宏与函数的区别 5.文件包含和多文件编译 6.条件编译 ===========================结构体 思考:如果现在希望保存一个学生的信息,姓名,身高,年龄,地址,该如何保存 char name[64]; float height; int age; char addr[64]; 1.什么是结构体 struct 结构体指的是一种数据结构,是c语言中复合数据类型的一 种多种不同数据类型的集合 2.结构体

结构体学习心得

结构体 1.简单认识结构体 #include<stdio.h> /*struct tag(member list)(varible list)*/ 成员列表     变量列表 struct stu { char name[20]; int age; char sex[5]; char tele[12]; char addr[30]; }; int main() { struct stu stu2; struct stu arr[10]; return 0; } 2.结构体的重命名 ①.type

结构体1之定义

这是在复习阶段随便小结的一些东西 别喷哦 结构体定义的三种方式 注意事项: 1结构体括号后面有分号 2#define得放在程序上面 3成员名可以和结构体名相同 4结构体类型不能直接访问成员,也不能赋值,必须先实例化,创建的时候才会分配内存 5struct 关键字不能省略 结构体的定义必须放在main函数的上面 1 //结构体的第一种方式 2 //struct dangdang 3 //{ 4 // char email[30]; 5 // char name[30]; 6 // char add

C语言 结构体作为参数和返回值使用

方案一:结构体变量作为参数,进行传值. 编译器需要拷贝,不影响origin value,使用成员操作符(.)直接访问 /********************************************************************** * 版权所有 (C)2017, Wang maochun. * * 文件名称:travel.cpp * 文件标识:无 * 内容摘要:主要演示结构体作为参数以及返回值 * 其它说明:"传值” * 当前版本:V1.0 * 作 者:Wang m

C语言结构体对齐

1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来访问.(.和->访问结构体元素其实质是一样的,只是C语言规定用结构体变量来访问元素用. 用结构体变量的指针来访问元素用->.实际上在高级语言中已经不区分了,都用.)(3)结构体的访问方式有点类似于数组下标的方式 2.利用指针访问结构体元素 结构体元素地址=结构体首地址+元素偏移量 struct m

结构体的使用简述

结构体指针变量的概念 当一个指针变量用来指向一个结构体变量时,称之为结构体指针变量. 结构体指针变量的定义 结构体指针变量定义的一般形式为: struct 结构体类型名 *结构体指针变量名: 例如,有如下结构体类型定义: #define N 10 /* 10 门课程 */ #define MAXLEN 20 /* 学生姓名最大长度 */ struct student { char name[MAXLEN]; int score[N]; } ; 则 , 要定义一个指向 student 的结构体指针