go语言中结构struct

package main;

import "fmt"

//结构struct

//定义Person结构
type Person struct {
	name string;
	age  int;
};

//结构里面还有一个匿名结构
type Person2 struct {
	name string;
	age  int;
	contact struct {
		phone string;
		addr  string;
	}
}

//结构里的匿名字段
type Person3 struct {
	string;
	int;
}

//嵌入结构,组合
type Person4 struct {
	Person;
	phone string;
	addr  string;
}

func main() {
	a := Person{};
	a.name = "test";
	a.age = 27;
	fmt.Println(a);

	//简单初始化方式
	b := Person{
		name: "test2",
		age:  24,
	};
	fmt.Println(b);

	//调用函数A,这里是传递的值拷贝
	A(b);
	fmt.Println(b);

	//调用函数B,这里传递的是地址
	B(&b);
	fmt.Println(b);

	//对结构初始化的时候,一般直接用取地址符号
	c := &Person{
		name: "test3",
		age:  25,
	};
	//在调用函数时,就不需要写取地址&符号
	B(c);
	fmt.Println(c);

	//匿名结构
	d := struct {
		name string;
		age  int;
	}{
		name: "test4",
		age:  22,
	};
	fmt.Println(d);
	e := Person2{
		name: "test5",
		age:  33,
	};

	//匿名结构的初始化
	e.contact.phone = "1388888888";
	e.contact.addr = "地址";
	fmt.Println(e);

	//注意字段的顺序
	f := Person3{
		"test6",
		55,
	};
	fmt.Println(f);

	//两个结构间的比较
	g := f;
	fmt.Println(g == f);

	//嵌入结构的初始化
	h := Person4{
		Person: Person{name: "test7", age: 66},
		phone:  "139999999",
		addr:   "地址2",
	};
	fmt.Println(h);
	h.Person.name = "哈哈";
	h.Person.age = 99;
	fmt.Println(h);
	//可以对name和age直接操作
	h.name = "haohao";
	h.age = 88;
	fmt.Println(h);
}

func A(p Person) {
	p.age = 33;
	fmt.Println(p);
}

func B(p *Person) {
	p.age = 33;
	fmt.Println(p);
}

  

原文地址:https://www.cnblogs.com/jkko123/p/6807725.html