3.11 go 结构体

/*
  结构体:相当于java 的类
*/
package main

import "fmt"

//结构体的定义
type Student struct {
	id   int
	name string
	sex  byte
	age  int
}

func test(s Student) {

	s.name = "yaya"
}
func test2(s *Student) {

	s.name = "yaya"
	s.age = 88
}

func main() {
	//01 顺序初始化,每个成员必须初始化
	var s1 Student = Student{1, "mike", 'm', 19}
	fmt.Println("s1=", s1)

	//02部分初始化 其他没有赋值的为默认值
	s2 := Student{id: 11}
	fmt.Println("s2=", s2)
	//03 指针 顺序初始化,每个成员必须初始化
	var s3 *Student = &Student{1, "mike", 'm', 19}
	fmt.Println("s3=", *s3)

	//04 指针 部分初始化 其他没有赋值的为默认值
	s4 := &Student{id: 11}
	fmt.Println("s4=", *s4)

	//05定义结构体普通变量  操作成员“."
	var s5 Student
	s5.age = 18 //赋值
	fmt.Println("age=", s5)
	//06结构体指针变量  指针有合法指向时,才操作成员
	//方式1先定义一个普通结构体变量
	var s6 Student
	var p1 *Student
	p1 = &s6
	p1.name = "huahua"
	fmt.Println("p1=", p1)
	//方式2
	p2 := new(Student)
	p2.name = "花花"
	fmt.Println(p2)
	//07结构体的比较和赋值 同种类型的可用==  !=比较;同种类型的也可以直接赋值。
	fmt.Println("s2=", s2)
	s2 = s1
	fmt.Println("s2=", s2)
	//08 结构体作为参数传递时  是值传递;传递引用需要传递指针变量类型
	test(s2)
	fmt.Println("值传递s2=", s2)
	test2(&s2)
	fmt.Println("引用传递s2=", s2)

	//09 可见性 不同包之间需要调用,函数、方法等等首字母需要大写。

}


发布了124 篇原创文章 · 获赞 94 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/h4241778/article/details/105306464