Golang struct 结构体注意事项和使用细节

结构体所有字段在内存当中是连续的


Golang struct 结构体注意事项和使用细节_第1张图片

type Point struct {
	x, y int
}

type Rect struct {
	leftUp, rightDown Point
}

func main() {
	//r1会在内存当中有四个整数
	r1 := Rect{
		leftUp: Point{
			x: 1,
			y: 2,
		},
		rightDown: Point{
			x: 3,
			y: 4,
		},
	}
	//r1有四个int,在内存当中是连续分布的,打印地址
	fmt.Printf("%p %p %p %p", &r1.leftUp.x, &r1.leftUp.y, &r1.rightDown.x, &r1.rightDown.y)

}

0xc0000141a0 0xc0000141a8 0xc0000141b0 0xc0000141b8

 一个int类型刚好8个字节。可以看到结构体的字段在内存当中是连续分布的,通过地址的加减来找到对应的数据。

	r1 := Rect{
		leftUp: &Point{
			x: 1,
			y: 2,
		},
		rightDown: &Point{
			x: 3,
			y: 4,
		},
	}
	fmt.Printf("%p %p", &r1.leftUp, &r1.rightDown)

0xc00003e260 0xc00003e268

可以看到指针的地址也是连续的。r1有两个*point类型,这个两个*Point类型的本身地址也是连续的,但是他们指向的地址不一定是连续。

 

结构体转换


Golang struct 结构体注意事项和使用细节_第2张图片

字段名称,字段类型,字段个数都得一致才可以转。

Golang struct 结构体注意事项和使用细节_第3张图片

你可能感兴趣的:(Go,面向对象编程结构体,struct,golang)