Bootstrap

Golang 基础知识(十一.struct结构体)

注意:根据内存对齐原则,结构体里面的数据类型,应根据类型所占的大小,依次排序,从小到大,越小越小前,主要是优化内存读取速度。(取值是有一个”框“的(32 :4,64,:8),根据框取值时候是一块一块的取,超出框的部分,取两次,并删除多余的部分再和前面取得数据合并,操作变多了,消耗就多)

type Part1 struct {
   
    a bool
    b int32
    c int8
    d int64
    e byte
}

type Part2 struct {
   
    e byte
    c int8
    a bool
    b int32
    d int64
}

func main() {
   
    part1 := Part1{
   }
    part2 := Part2{
   }

    fmt.Printf("part1 size: %d, align: %d\n", unsafe.Sizeof(part1), unsafe.Alignof(part1))
    fmt.Printf("part2 size: %d, align: %d\n", unsafe.Sizeof(part2), unsafe.Alignof(part2))
}

输出结果:

part1 size: 32, align: 8
part2 size: 16, align: 8
1.定义

Go语言中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称struct。 也就是我们可以通过struct来定义自己的类型了。

Go语言中通过struct来实现面向对象。

注意:

  • 类型名:标识自定义结构体的名称,在同一个包内不能重复。
  • 字段名:表示结构体字段名。结构体中的字段名必须唯一。
  • 字段类型:表示结构体字段的具体类型。

使用typestruct关键字来定义结构体,具体代码格式如下:

type 类型名 struct {
   
    字段名 字段类型
    字段名 字段类型
    …
}

举个例子:

type person struct {
   
	name string
	city string
	age  int8
}

func main() {
   
	var p1 person
	p1.

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;