我們知道Golang裡都是通過結構體Struct來定義類和相關屬性的。這裡有點需要注意的是,屬性的首字母大小寫表示的意義是不同的!
go中根據首字母的大小寫來確定可以訪問的許可權。無論是方法名、常量、變數名還是結構體的名稱,如果首字母大寫,則可以被其他的包訪問;如果首字母小寫,則只能在本包中使用。
可以簡單的理解成,首字母大寫是公有的,首字母小寫是私人的
但是這些都不是重點,畢竟這些很多人都知道。
還有一個很大的不同時超哥在寫項目中遇到的(慚愧啊,go基礎還是不紮實):
類屬性如果是小寫開頭,則其序列化會丟失屬性對應的值,同時也無法進行Json解析。
廢話少說上代碼
package mainimport ( "bytes" "encoding/gob" "log" "encoding/json" "fmt")type People struct { Name string Age int description string //注意這個屬性和上面不同,首字母小寫}//序列化func (people *People) Serialize() []byte { var result bytes.Buffer encoder := gob.NewEncoder(&result) err := encoder.Encode(people) if err != nil{ log.Panic(err) } return result.Bytes()}//還原序列化func DeSerializeBlock(peopleBytes []byte) *People { var people People decoder := gob.NewDecoder(bytes.NewReader(peopleBytes)) err := decoder.Decode(&people) if err != nil { log.Panic(err) } return &people}func main () { people := People{ "chaors", 27, "a good good boy", } fmt.Println() fmt.Println("序列化前:", people) //序列化 peopleBytes := people.Serialize() //還原序列化取出 fmt.Println() fmt.Println("還原序列化取出:", DeSerializeBlock(peopleBytes)) fmt.Println() //Json解析 if peopleJson, err := json.Marshal(people); err == nil { fmt.Println("Json解析:", string(peopleJson)) //description無法解析 }}
運行結果:
image.png
.
.
.
.
互連網顛覆世界,區塊鏈顛覆互連網!
--------------------------------------------------20180703 20:30