package mainimport (
"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...