1. 程式人生 > >Go語言——struct、type、func的綜合用法

Go語言——struct、type、func的綜合用法

最近在學golang語言,對於struct、type、func的學習進行了簡單的程式設計練習,程式碼如下

package main

import (
	"fmt"
)

const (
	WHITE = iota
	BLACK
	BLUE
	RED
	YELLOW
)

//Color 宣告Color為byte的別名
type Color byte 

//Box type box
type Box struct {
	len, wid, high float64
	c Color
}

//BoxList box集合,不確定個數,使用動態陣列
type BoxList []Box

//Volume 計算box的容量
func (b Box) Volume() float64 {
	return b.len*b.wid*b.high
}

//SetColor 將box的顏色設為特定值
func (b Box) SetColor(c Color) {
	b.c = c
}

//BiggestColor 找boxlist中容量最大的box的顏色
func (boxlist BoxList) BiggestColor() (c Color) {
	v := 0.0
	c = WHITE

	//遍歷boxlist,求容量最大的
	for _, b := range boxlist {
		if tmpv := b.Volume(); tmpv > v {
			v = tmpv
			c = b.c
		}
	}

	return
}

//SetBlack 將boxlist中的box顏色都設定為BLACK
func (boxlist BoxList) SetBlack() {
	for i := range boxlist {
		boxlist[i].c = BLACK
	}
}

//PrintBox 列印box
func (b Box) PrintBox() {
	fmt.Println(b.len, b.wid, b.high, b.Volume(), b.c.String())
}

//String 將顏色以字串形式返回
func (c Color) String() string {
	strings := []string{"WHITE", "BLACK", "BLUE", "RED", "YELLOW"}
	return strings[c]
}

func main() {
	//建立一個boxlist,儲存若干box
	boxlist := BoxList{
		Box{1,2,3,RED},
		Box{1,4,2,WHITE},
		Box{4,2,5,BLACK},
		Box{2,4,3,BLUE},
	}

	//列印所有的box
	for i := range boxlist {
		boxlist[i].PrintBox()
	}

	//輸出boxlist的大小
	fmt.Println("len of boxlist = ", len(boxlist))
	
	//輸出第二個box的顏色
	fmt.Println("color of boxlist[1] = ", boxlist[1].c.String())
	
	//輸出boxlist中容量最大的box的顏色
	fmt.Println("biggest color = ", boxlist.BiggestColor())
	
	//將boxlist中的所有box顏色都設定為黑色
	boxlist.SetBlack()
	fmt.Println("將所有box顏色設定為黑色")
	for i := range boxlist {
		boxlist[i].PrintBox()
	}
}