1. 程式人生 > >Golang筆記-大小寫作用範圍

Golang筆記-大小寫作用範圍

驗證作用範圍所使用的目錄結構: 在這裡插入圖片描述 其中main.go內容如下:

package main

import (
	"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 {
	a      int
	bbbbb  string
	Cccccc byte           //`json:"ccc"`
	D      map[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