package main
import "fmt"
//在函数外部定义结构体 作用域是全局的
//type 结构体名 struct{
// 结构体成员列表
//}
type Student struct {
id int
name string
sex string
age int
addr string
}
func main01() {
//通过结构体名 定义结构体变量
//var s Student
结构体变量名.成员名
//s.id=101
//s.name="张飞"
//s.sex="男"
//s.age=28
//s.addr="北京燕郊"
//
//fmt.Println(s)
//var s Student=Student{101,"关羽","男",29,"山西运城"}
s:=Student{age:30,id:103,name:"刘备",addr:"巴蜀",sex:"男"}
fmt.Println(s.id)
fmt.Println(s.name)
fmt.Println(s.sex)
fmt.Println(s.age)
fmt.Println(s.addr)
s:=Students{101,"貂蝉","女",18,"徐州"}
//结构体变量赋值
s1:=s
s1.age=22
fmt.Println(s1)
fmt.Println(s)
//在结构体中使用== != 可以对结构体成员进行比较操作
if s1==s{
fmt.Println("相同")
}else {
fmt.Println("不相同")
}
//大于 小于可以比较结构体成员
if s.age > s1.age{
fmt.Println("真")
}else {
fmt.Println("假")
}
}
func main02() {
//var 结构体变量名 结构体类型
//定义结构体数组
//var 结构体数组名 [元素个数]结构体类型
var arr [5]student
//len(数组名)计算数组元素个数
//fmt.Println(len(arr))
for i:=0;i<len(arr) ;i++ {
fmt.Scan(&arr[i].id,&arr[i].name,&arr[i].sex,&arr[i].age,&arr[i].score,&arr[i].addr)
}
//结构体 排序 根据结构体成员进行排序
/*
101 孙尚香 女 16 88 江东
102 黄月英 女 28 90 襄阳
103 大乔 女 26 70 江东
104 小乔 女 24 60 江东
105 甄姬 女 20 50 许昌
*/
for i := 0; i < len(arr)-1; i++ {
for j := 0; j<len(arr)-1-i;j++ {
//比较结构体成员 年龄 成绩
if arr[j].score > arr[j+1].score{
//结构体数组中的元素 允许相互赋值 将结构体成员中的所有数据进行相互交换
//arr[j],arr[j+1]=arr[j+1],arr[j]
//结构体成员依次交换 不建议采用
//arr[j].id,arr[j+1].id=arr[j+1].id,arr[j].id
//arr[j].name,arr[j+1].name=arr[j+1].name,arr[j].name
//arr[j].sex,arr[j+1].sex=arr[j+1].sex,arr[j].sex
//arr[j].score,arr[j+1].score=arr[j+1].score,arr[j].score
//arr[j].age,arr[j+1].age=arr[j+1].age,arr[j].age
//arr[j].addr,arr[j+1].addr=arr[j+1].addr,arr[j].addr
}
}
}
for i := 0; i<len(arr);i++ {
fmt.Println(arr[i])
}
}
func main03(){
//[元素个数]数组 []切片len
arr:=[]student{{101,"曹操","男",58,90,"许昌"},
{102,"夏侯惇","男",40,100,"荆州"},
{103,"张辽","男",38,99,"许昌"}}
//在切片中添加数据
arr=append(arr,student{104,"许褚","男",28,99,"许昌"})
arr=append(arr,student{105,"典韦","男",38,99,"许昌"})
for i,v:=range arr{
fmt.Println(i,v)
}
}
package main
import "fmt"
type stu struct {
name string
age int
score int
}
func main0501() {
//定义map
m:=make(map[int]stu)
m[101]=stu{"周瑜",28,101}
m[102]=stu{"孙策",32,78}
//fmt.Println(m)
for k,v:=range m{
fmt.Println(k,v)
}
}
func main(){
m:=make(map[int][]stu)
m[101]=append(m[101],stu{"曹操",50,88},stu{"张辽",38,98},stu{})
m[102]=append(m[102],stu{"刘备",50,88},stu{"张飞",38,98})
m[103]=append(m[103],stu{"孙权",50,88},stu{"甘宁",38,98},stu{"太史慈",38,98})
//m[101][1].name="张文远"
for k,v:=range m {
for i,data:=range v{
if data.name=="张飞"{
fmt.Println(k,i,data)
}
//fmt.Println("key:",k,"index",i,"value:",data)
}
}
}
package main
import "fmt"
type person struct {
id int
name string
score int
sex string
}
func test(s person){
//fmt.Println(s.name)
//fmt.Println(s.score)
//fmt.Println(s.sex)
s.name="李逵"
}
func main0601() {
stu:=person{101,"宋江",9,"男"}
//结构体作为函数参数 值传递
test(stu)
fmt.Println(stu)
}
//所有的切片都属于地址传递
func test1(stu []person){
stu[0].name="晁盖"
}
func main(){
//结构体切片
stus:=[]person{person{101,"宋江",9,"男"},
person{102,"卢俊义",99,"男"}}
//为切片添加信息
stus=append(stus,person{103,"吴用",88,"男"})
//结构体切片作为函数参数是地址传递
//结构体数组作为函数参数是值传递
test1(stus)
fmt.Println(stus)
}