golang結構體注意事項和使用細節

2022-10-07 21:54:15 字數 1122 閱讀 3433

package main

import (

"encoding/json"

"fmt"

)type point struct

type rect struct

type rect2 struct

type monster struct

func main() , point}

fmt.println(r1)

fmt.printf("r1.leftup.x 位址=%p r1.leftup.y 位址=%p \n", &r1.leftup.x, &r1.leftup.y)

fmt.printf("r1.rightdown.x 位址=%p r1.rightdown.y 位址=%p \n", &r1.rightdown.x, &r1.rightdown.y)

//結構體指標仍然是連續的,但是其指向的位址不一定連續

r2 := rect2, point}

fmt.printf("r2.rightdown 位址=%p r2.leftup 位址=%p \n", &r2.rightdown, &r2.leftup)

//結構體是使用者單獨定義的型別,和其他型別進行轉換時需要有完全相同的字段(名字、個數和型別)

//struct的每個欄位上,可以寫上乙個tag,該tag可以通過反射機制獲取,常見的使用場景就是序列化和反序列化

/* 將struct變數進行json處理:

問題:json處理後的欄位名也是首字母大寫,這樣如果我們是將json後的字串返回給其他程式使用

比如jquery,php等,如果他們不習慣這個命名方式,怎麼處理

將monster的字段首字母小寫,這個行不通,處理後返回的是空字串

因為json.marshll相當於在其他包訪問monster結構體,首字母小寫就無法在其他包訪問

所以要使用tag標籤

*/ monster := monster

//將monster變數序列化為json格式字串

jsonstr, err := json.marshal(monster)

if err != nil

fmt.println("jsonstr", string(jsonstr))

}

結構體注意事項

include struct stu char name int main void struct stu student struct stu student1 strcpy student1 name,zhangsan 編譯能通過但會出現斷錯誤。strcpy student name,zhang...

結構體簡單注意事項

結構體是一些值得集合,這些值稱為成員變數.結構體的每個成員可以是不同型別的變數.甚至可以是結構體.結構體可以用 初始化,不能用 賦值 等價於 先 再 p name 等價於 p name 結構體傳參時,要傳結構體的位址.因為函式傳參的時候,引數是需要壓棧的。如果傳遞乙個結構體物件的時候,結構體過大,引...

Go 結構體使用注意事項和細節

結構體 type point struct 結構體 type rect struct func main point r1有四個int,在記憶體中是連續分布 列印位址 fmt.printf r1.leftup.x 位址 p r1.leftup.y 位址 p r1.rightdown.x 位址 p r...