Golang struct 结构体注意事项和使用细节
  mJ3y71vHJ0RC 2023年11月15日 40 0


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


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

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 结构体注意事项和使用细节_golang_02

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

Golang struct 结构体注意事项和使用细节_字段类型_03

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
mJ3y71vHJ0RC