【Golang笔记-大小写作用范围】验证作用范围所使用的目录结构:
文章图片
其中main.go内容如下:
package mainimport (
"encoding/json"
"fmt" "practice/mulu1"
"practice/mulu2"
"practice/mulu4"
)//1.即使mulu1下的Plus是首字母大写,这里也要导入包;
但如果Plus是首字母小写,导包plus也语法不可用
//2.导包的路径是实际的文件系统目录,而首字母大小写可见范围所针对的包是指go文件首行package关键字后面的跟随包名:“package notmulu1”
//3.两个go文件在不同目录设置相同包名,即mulu1.go和mulu4.go中都为package notmulu1,会报重复声明错误。
//4.两个go文件在相同目录下使用不同的包名,即mulu1下的mulu1.go和mulu11.go.中分别为package notmulu1和notmulu11,语法也不通过。
//5.两个go文件在相同目录下使用相同的包名,则可行,如mulu1下的mulu1.go和mulu11.go.中都为package notmulu1。
type fish struct {
aint
bbbbbstring
Cccccc byte//`json:"ccc"`
Dmap[string]int //`json:"ddd"`
}func main() {
c := notmulu1.Plus(1, 2)
// _ = mulu1.plus(2, 2)//不可用
d := mulu2.Minus(3, 1)
e := notmulu2.Div(4, 2)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
//6.Bird结构体在mulu2包里,如果首字母小写bird,则这里报错,不可见
aa := mulu2.Bird{
Bbbbbb: "2",
Cccccc: '3',
//7.Bird成员D如果小写,则会报错,“结构体Bird里没有这个成员”,不可见
//d: map[string]int{"a": 1, "b": 2},
D: map[string]int{"a": 1, "b": 2},
}
//check cache!!
ledger, ok := aa.D["c"]
if ok {
fmt.Println(ledger)
}
// ledger := aa.d["a"]
// fmt.Println(ledger)
fmt.Println(aa)
//8.fish的成员以小写字母开头的,序列化之后会丢失这个成员
bb := fish{
a:1,
bbbbb:"2",
Cccccc: '3',
D:map[string]int{"a": 1, "b": 2},
}
b, err := json.Marshal(bb)
if err != nil {
fmt.Println("err:", err.Error())
}
fmt.Println(string(b))
}//总结:golang的命名需要使用驼峰命名法,且不能出现下划线
//无论是方法名、常量、变量名还是结构体的名称(包括其成员),如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用。
//结构体成员首字母小写,则在序列化的时候会丢失该成员
//不同目录下使用不同包名,相同目录下使用相同包名,包名指的是go文件首行的paceage packagename
推荐阅读
- 【golang】leetcode中级-字母异位词分组&无重复字符的最长子串
- 彻底理解Golang Map
- kratos线上开源年会它来啦~
- 深入浅出 Golang 资源嵌入方案(go-bindata篇)
- 深入浅出 Golang 资源嵌入方案(前篇)
- golang 经典案例总结
- Go实战 | 基于有向无环图的并发执行流的实现
- Golang 数组和切片
- Go JSON编码与解码()
- golang map基础知识