go - struct

// 结构体定义时初始化
	books :=[]Book{
		Book{
			"alpha",
			200,
		},
		Book{
			"spider",
			200,
		},
	}
	books[0].Price=500
//结构体定义完后,初始化
	book1 :=[2]Book{}
	book1[0].Price =100
	book1[0].Title="alpha"
	book1[1].Price =300
//  struct匿名成员(字段、属性)

package main

import "fmt"

type Person struct {
	Name string
	Age  int
}
type Student struct {
	score  string
	Age    int
	Person // 匿名内嵌结构体
}

func main() {
	var stu = new(Student)
	stu.Age = 22                         //优先选择Student中的Age
	fmt.Println(stu.Person.Age, stu.Age) // 0,22

	var stu2 = Student{
		score: "100",
		Age:   20,
		Person: Person{
			Name: "alpha",
			Age:  18,
		},
	}
	fmt.Println("stu2: ", stu2)
}

package main

import (
	"fmt"
	"unsafe"
)
// 大写是公开,小写是私有的
type Student struct {
	name  string
	age   int32  // 小写 私密 只能在自己的包里面用
	Class string // 大写 公开 类似C++  public
}

func main() {
	// 1 值形式
	var stu1 Student // 里面的变量全是零 栈上的
	fmt.Println("stu1:", stu1)
	stu1.age = 34
	stu1.name = "darren"
	stu1.Class = "class1"
	fmt.Println(stu1.name) //darren

	// 2 new 函数创建
	var stu2 *Student = new(Student) // new出来的是堆上
	stu2.name = "alpha"
	stu2.age = 33
	fmt.Println(stu2.name, (*stu2).name) 
/*********************************************************/
	// &形式创建  
	var stu3 *Student = &Student{
		name:  "rose",
		age:   18,
		Class: "class3", // 如果分行的时候每行都要,  逗号
	}
	// var stu3 *Student = &Student{name: "rose", age: 18, Class: "class3"}
	fmt.Println(stu3.name, (*stu3).name) //rose  rose
	fmt.Printf("addr: %p, %p, %p\n", &stu1, stu2, stu3)

	// 值 初始化
	var stu4 Student = Student{ // KV 形式初始化值
		name:  "lucy",
		age:   18,
		Class: "Go", // 注意这里的逗号不能少
	}
	fmt.Println("stu4:", stu4) // 

	book2 := Book{
		"alpha",
		100,
	}
	fmt.Println(book2.Title,book2.Price)
	book2.Title = "spider"
	fmt.Println(book2.Title,book2.Price)
	book3 := &Book{
		"alpha1",
		1000,
	}
	fmt.Println(book3.Title,book3.Price)
	book3.Title = "spider"
	fmt.Println(book3.Title,book3.Price)

	fmt.Println(reflect.TypeOf(book2))
	fmt.Println(reflect.TypeOf(book3))
值的方式和返回指针的方式初始化

/*********************************************************/
	// 值顺序初始化
	var stu5 Student = Student{ // 顺序形式 形式初始化值
		"1",
		18,
		"2004", // 注意这里的逗号不能少
	}
	fmt.Println("stu5:", stu5)

	// nil结构体
	var stu6 *Student = nil
	fmt.Println("stu6:", stu6)

	// 结构体大小
	fmt.Println("unsafe.Sizeof(stu5):", unsafe.Sizeof(stu5))
	fmt.Println("unsafe.Sizeof(stu6):", unsafe.Sizeof(stu6))
	// fmt.Println("unsafe.Sizeof(string):", unsafe.Sizeof(string))
	// fmt.Println("unsafe.Sizeof(int):", unsafe.Sizeof(int))
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值