golang结构体
結構體
type Student struct {id intname stringsex byteage int }初始化
type Student struct {id intname stringsex byte //字符類型age int }func main() {//順序初始化,每個成員必須初始化var s1 Student = Student{1, "2", 'm', 18}fmt.Println(s1)//指定成員初始化,沒有初始化的成員,自動賦值為0student := Student{name: "mike", age: 19}fmt.Println(student) }結構體指針
func main() {var s1 *Student = &Student{1, "2", 'm', 18}fmt.Println("*s1 = ", *s1)//指定成員初始化,沒有初始化的成員,自動賦值為0student := &Student{name: "mike", age: 19}//打印類型fmt.Printf("student type %T\n", student)fmt.Println("*student = ", *student) }輸出
*s1 = {1 2 109 18} student type *main.Student *student = {0 mike 0 19} func main() {var s Studentvar p1 *Studentp1 = &s//通過指針操作成員 p1.id和(*p1).id完全等價,只能使用.p1.id = 1(*p1).name = "mike"p1.age = 11fmt.Println(*p1) }new申請空間
func main() {p1 := new(Student)p1.id = 1(*p1).name = "mike"p1.age = 11fmt.Println(*p1) }結構體比較
如果結構體成員都是可比較的,那結構體也是可比較的,可以使用==或!=,但是不支持>或<
函數參數
值傳遞不是引用
func test01(s Student) {s.id = 666fmt.Println("test01: ", s) }func main() {s := Student{1, "mike", 'x', 11}test01(s)fmt.Println("main: ", s) }輸出
test01: {666 mike 120 11} main: {1 mike 120 11}大小
unsafe.Sizeof
func main() {var p Powerp.age = 11p.name = "wfwef"fmt.Println(unsafe.Sizeof(p)) }內存地址
結構體的變量地址等于首個元素的內存地址
nil
空struct這么表示:
struct{}{}例子:
package mainimport "fmt"func main() {s := struct{}{}fmt.Printf("%T,%v,%+v\n", s, s, s) }輸出
struct {},{},{}大括號左右可以多個空格,比如這樣也是可以的
struct {} {}總結
- 上一篇: golang中的sync.Map
- 下一篇: golang中的文件读写