pythone网站开发,可以自己制作图片的软件,国税局网站里打印设置如何做,推荐邵阳网站建设目录
golang大小写的规则#xff1a;
1、可见性#xff08;visibility#xff09;#xff1a; 2、包的导入和调用#xff1a;
3、json序列化和反序列化#xff1a;
4、结构体字段的导出和可见性#xff1a;
5、方法和函数的导出和可见性 #xff1a;
6、常量和变…目录
golang大小写的规则
1、可见性visibility 2、包的导入和调用
3、json序列化和反序列化
4、结构体字段的导出和可见性
5、方法和函数的导出和可见性
6、常量和变量的导出和可见性
小结
程序示例说明
程序输出结果 golang大小写的规则
在golang语言中大小写通常用于指示标志符如变量名、函数名、方法名、数据类型名的可见性和访问权限大小写的影响主要体现在以下几个方面
1、可见性visibility 大写字母开头的标志符表示可导出exported,可以被外部包引用和访问小写字母开头的标志符表示不可导出unexported不可以被外部包引用和访问 2、包的导入和调用 大写字母开头的标志符表示被导出的标志符可以在其他包中直接使用小写字母开头的标志符表示私有的只能在当前包内使用 3、json序列化和反序列化 大写字母开头的字段在使用encoding/json包进行序列化和反序列化时会被导出到json中小写字母开头的字段在使用encoding/json包进行序列化和反序列化时会被忽略掉 4、结构体字段的导出和可见性 大写字母开头的字段表示该字段时导出的可以被其他包访问小写字母开头的字段表示该字段是私有的不可导出的只能在定义该结构体的包内部进行访问 5、方法和函数的导出和可见性 大写字母开头的方法名称或者函数名称表示该方法是导出的可以被其他包调用小写字母开头的方法名称或者函数名称表示该方法是私有的只能在定义该方法或者函数的包内部调用,不可以在被其他包调用这里需要注意的是是不可以被其他包直接调用间接也是可以的比如A包内定义了个大写字母开头的函数Afunc如何Afunc内调用了A包内的bfunc那B包内也是可以间接调用A包中的Afunc再调用bfunc的 6、常量和变量的导出和可见性 大写字母开头的常量或者变量表示导出的公开的可以被其他包访问小写字母开头的常量或者变量表示不可导出的私有的只有在定义它们的包的内部访问 小结
我们在设计一个标识符变量、常量、结构体类型、函数方法时
大写字母开头如果这个标识符是导出的可见的公共的可以被其他包访问或者调用的
小写字母开头如果这个标志符是不可导出的私有的只限制当前包访问或调用的
对大小写标志符合理的定义尽可能地减少全局命名空间的污染、提高代码的可读性和可维护性、可以清晰地表示标志符的可见性和作用范围减少不必要的暴露提高代码的封装性和安全性
程序示例说明
package mainimport (encoding/jsonfmttest/pack1
)type Person struct {Name stringage int
}type strudent struct {name stringage int
}type teacher struct {Name stringage int
}type mainType struct {Name string
}func (m *mainType) mainMethod() {fmt.Println(this private function in main)
}func main() {person : Person{Name: Same,age: 20,}data1, err : json.Marshal(person)if err ! nil {fmt.Println(Json Marshal person error:, err)return}fmt.Println(string(data1)) //{Name:Same}stu : strudent{name: lee,age: 22,}data2, err : json.Marshal(stu)if err ! nil {fmt.Println(Json MarShal student error:, err)return}fmt.Println(string(data2)) //{} 小写字母开头的字段是忽略的tea : teacher{Name: Joo,age: 35,}data3, err : json.Marshal(tea)if err ! nil {fmt.Println(Json MarShal teacher error:, err)return}fmt.Println(string(data3)) //{Name:Joo} 大写字母开头的字段被解析小写字母开头的字段名是忽略的//main包访问pack1包内定义的大写字母开头的变量可行的fmt.Println(pack1.PublicVar1)//main包调用pack1包定义的小写字母开头的变量是未定义的//fmt.Println(pack1.privateVar1)//undefined: pack1.privateVar1//main包调用pack1包内定义的大写字母开头的函数是可行的pack1.PublicFunction()//调用其他包定义的小写字母开头的函数是未定义的//pack1.privateFunction// undefined: pack1.privateVar1s : pack1.StructType{Name: Lily}s.PublicMethod()//调用其他包定义的小写字母开头的方法是未定义的//s.privateMethod()//s.privateMethod undefined//main 包的方法可以被直接调用的m : mainType{Name: meimei}m.mainMethod()
}
程序输出结果
{Name:Same}
{}
{Name:Joo}
10
Public function
Public Method
this private function in main