为了账号安全,请及时绑定邮箱和手机立即绑定

GO学习笔记3-Struct使用

标签:
Go

package main

import (
. "fmt" //点的作用是以后使用到fmt包中的函数,可以省略fmt.直接写函数名
//如 fmt.Println() 可以直接写为Println()
"math"
)

func main() {
Println("测试")
//GOTO跳转
for i := 0; i < 10; i++ {
if i == 5 {
goto GOHere
} else {
Println(i)
}
}

GOHere:
Println("GOTO到此处!")

//函数的调用,修改地址内的值
b := 3
a := changeVal(&b)
Println("改变的值:", a)

//变参函数的调用
changeCan(1, 2, 3)
changeCan(1, 2, 3, 4, 5)
//defer采用后进先出模式
for i := 5; i > 0; i-- {
    defer Println("defer输出值:", i)
}

//Stract结构使用
var p Human
p.Name = "john"
p.Age = 21
p.Height = 1.70
p.Sex = true

Println("一般赋值为:", p)

q := Human{"Cena", 18, 1.68, false}
Println("简略赋值为:", q)

k := Human{Age: 20, Height: 1.75, Sex: true, Name: "Juff"}
Println("指定字段赋值为:", k)

//比较年龄
l, r, t := CompareAge(p, q)
Println("年龄大的是:", l, "年龄为:", r, "身高为:", t)

//比较身高
s, u, v := CompareHeight(q, k)
Println("身高高的是:", s, "年龄为:", u, "身高为:", v)

//得到性别为男的
z := GetSex(p, q, k)
Println("男的有:", z)

//struct的重写
Bob := Employee{Person{"Bob", 44, "12345678"}, "Enginer", "abcdefgh"}
Println("Bob的基本信息是:", Bob, "Bob的电话:", Bob.Phone, "Bob的电话1:", Bob.Person.Phone)

//方法的使用
Chang := Rectange{2, 3}
Println("长方形的面积是:", Chang.Areas())
Yuan := Circle{3}
Println("圆形的面积是:", Yuan.Areas())

changdu := "123456789"
Println("长度的测试:", len(changdu))

//结构体的混合使用
boxes := BoxList{
    Box{4, 4, 4, RED},
    Box{10, 10, 1, YELLOW},
    Box{1, 1, 20, BLACK},
    Box{10, 10, 1, BLUE},
    Box{20, 30, 20, WHITE},
    Box{10, 20, 20, YELLOW},
}
Println("列表的长度:", len(boxes))
Println("第一个的体积是:", boxes[0].Tiji(), "cm³")
Println("最后一个的颜色是:", boxes[len(boxes)-1].color.String())
Println("最大的体积的颜色是", boxes.BiggestsColor().String())
Println("设置所有的颜色为BLACK")
boxes.PrintBlack()
Println("颜色是:", boxes[4].color.String())
Println("体积最大的颜色是:", boxes.BiggestsColor().String())

}

//地址函数
func changeVal(a int) int {
a = a + 1 // 修改了a的值
return
a // 返回新值
}

//变参函数
func changeCan(arg ...int) {
for _, n := range arg {
Println("参数是:", n)
}
}

//Struct结构声明
type Human struct {
Name string
Age int
Height float64
Sex bool
}

//Struct作为函数的参数
func CompareAge(p1, p2 Human) (Human, int, float64) {
if p1.Age > p2.Age {
return p1, p1.Age, p1.Height
} else {
return p2, p2.Age, p2.Height
}

}
func CompareHeight(p1, p2 Human) (Human, int, float64) {
if p1.Height > p2.Height {
return p1, p1.Age, p1.Height
} else {
return p2, p2.Age, p2.Height
}
}

//模糊查询
func GetSex(arg ...Human) (result [3]Human) {
for k, v := range arg {
if v.Sex == true {
result[k] = v
}
}
return result
}

//struct重写
type Person struct {
Name string
Age int
Phone string
}
type Employee struct {
Person
Postion string
Phone string
}

//Method方法
//虽然method的名字一模一样,但是如果接收者不一样,那么method就不一样
//method里面可以访问接收者的字段
//调用method通过.访问,就像struct里面访问字段一样
type Rectange struct {
Width, Height float64
}
type Circle struct {
R float64
}

func (r Rectange) Areas() float64 {
return r.Width r.Height
}
func (c Circle) Areas() float64 {
return c.R
c.R * math.Pi
}

//静态变量颜色列表
const (
WHITE = iota
BLACK
RED
YELLOW
BLUE
)

type Color byte

type Box struct {
width, height, depth float64
color Color
}

//切片
type BoxList []Box

//计算体积
func (B Box) Tiji() float64 {
return B.width B.height B.depth
}

//设置颜色
//此处采用指针作为对象的原因是,改变的值是对象的内存中的值,而不是取出的对象的值
//AA取出的是AA对象的内存值,AA取出的是AA对象的copy值
//若是修改AA对象的值,则采用指针的方式
//若是去除AA对象的值,则采用Copy的方式
func (b
Box) SetColor(c Color) {
b.color = c
}

//比较体积的最大值,设置颜色
func (bl BoxList) BiggestsColor() Color {
v := 0.00
k := Color(WHITE)

for _, b := range bl {
    if b.Tiji() > v {
        v = b.Tiji()
        k = b.color
    }
}
return k

}

//设置颜色全为BLACK
func (bl BoxList) PrintBlack() {
for i, _ := range bl {
bl[i].SetColor(BLACK)
}
}
func (c Color) String() string {
strings := []string{"WHITE", "BLACK", "BLUE", "RED", "YELLOW"}
return strings[c]
}

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
11
获赞与收藏
43

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消