步驟:
1)聲明(定義)結構體,確定結構體名
2)編寫結構體的字段
3)編寫結構體的方法
學生案例:
1)編寫一個Student結構體,包含name、gender、age、id、score字段,分別為string、string、int、int、float64類型。
2)結構體中聲明一個say方法,返回string類型,方法返回信息中包含所有字段值。
3)在main方法中,創建Student結構體實例(變量),並訪問say方法,並將調用結果打印輸出。
案例演示:
type Student struct {
Name string
Gender string
Age int
Id int
Score float64
}
func (student *Student) say() string {
infoStr := fmt.Sprintf("student的信息 name=[%v] gender=[%v] age=[%v] id=[%v] score=[%v]",
student.Name, student.Gender, student.Age,
student.Id, student.Score)
return infoStr
}
func main() {
var stu = Student{
Name : "tom",
Gender : "male",
Age : 18,
Id : 1000,
Score : 99.98,
}
str := stu.say()
fmt.Println(str)
}
小狗案例:
1)編寫一個Dog結構體,包含name、age、weight字段
2)結構體中聲明一個say方法,返回string類型,方法返回信息中包含所有字段值。
3)在main方法中,創建Dog結構體實例(變量),並訪問say方法,將調用結果打印輸出。
案例演示:
type Dog struct {
Name string
Age int
Weight float64
}
func (dog *Dog) say() string {
infoStr := fmt.Sprintf("dog的信息 name=[%v] age=[%v] weight=[%v]",
dog.Name, dog.Age, dog.Weight)
return infoStr
}
func main() {
var stu = Dog{
Name : "jim",
Age : 4,
Weight : 32.2,
}
str := stu.say()
fmt.Println(str)
}
盒子案例:
1)編程創建一個Box結構體,在其中聲明三個字段表示一個立方體的長、寬和高,長寬高要從終端獲取
2)聲明一個方法獲取立方體的體積。
3)創建一個Box結構體變量,打印給定尺寸的立方體的體積。
案例演示:
type Box struct {
len float64
width float64
height float64
}
func (box *Box) getVolumn() float64 {
return box.len * box.width * box.height
}
func main() {
var box Box
box.len = 1.1
box.width = 2.0
box.height = 3.0
volumn := box.getVolumn()
fmt.Printf("體積為=%.2f", volumn)
}
景區門票案例:
1)一個景區根據游人的年齡收取不同價格的門票,比如年齡大於18,收費20元,其它情況門票免票。
2)請編寫Visitor 結構體,根據年齡段決定能夠購買的門票價格並輸出
案例演示:
type Visitor struct {
Name string
Age int
}
func (visitor *Visitor) showPrice() {
if visitor.Age >= 90 || visitor.Age <= 8 {
fmt.Println("出於安全考慮,拒絕進入")
return
}
if visitor.Age > 18 {
fmt.Printf("游客的名字為%v 年齡為%v 收費20元 \n", visitor.Name, visitor.Age)
} else {
fmt.Printf("游客的名字為%v 年齡為 %v 免費 \n", visitor.Name, visitor.Age)
}
}
func main() {
var v Visitor
for {
fmt.Println("請輸入你的名字")
fmt.Scanln(&v.Name)
if v.Name == "n" {
fmt.Println("退出程序...")
break
}
fmt.Println("請輸入你的年齡")
fmt.Scanln(&v.Age)
v.showPrice()
}
}