以往我們在設定變數的時候
設定都往往都是單一的值
那如果今天需要同時表示一個三維的座標的話呢
那今天的主角 Struct 就派上用場拉!
package main
import "fmt"
type address struct {
x float64
y float64
z float64
}
func main() {
p := address{x: 5.0, y: 6.0 , z : 7.0}
fmt.Println("[" , p.x , "," , p.y , "," , p.z , "]" )
}
https://play.golang.org/p/lIEBnuIleW0
執行結果
[ 5 , 6 , 7 ]
首先利用 type 宣告新的型別
命新的型別名為 address 並賦予 x ,y 兩個皆為float64的屬性
接著在 main 函式裡宣告一個新的變數 p 並賦予x, y 數值
也可以使用匿名結構如下
package main
import "fmt"
func main() {
p := struct{
x float64
y float64
z float64
}{x: 5.0, y: 6.0 , z : 7.0}
fmt.Println("[" , p.x , "," , p.y , "," , p.z , "]" )
}
https://play.golang.org/p/zDWgOYpslTC
透過struct我們可以更有效率的處理數據
package main
import "fmt"
type address struct {
x float64
y float64
z float64
}
func main() {
p := address {x: 5.0, y: 6.0 , z : 7.0}
w := address {x: 7.0, y: 1.0 , z : 4.0}
midpoint := address{x :(p.x+w.x)/2 ,y :(p.y+w.y)/2 , z :(p.z+w.z)/2 }
fmt.Print("p點和w點的中點為")
fmt.Println("[" , midpoint.x , "," , midpoint.y , "," , midpoint.z , "]" )
}
https://play.golang.org/p/fqQIqcjz48l
執行結果
p點和w點的中點為[ 6 , 3.5 , 5.5 ]
當然 要加入兩個以上的型別也是行得通的
package main
import (
"fmt"
"math"
)
type coordinate struct {
x float64
y float64
}
type area struct {
con float64
p float64
}
func main() {
a := coordinate{1.0,2.0}
b := coordinate{5.0,14.0}
c := coordinate{13.0,4.0}
triangle := area{con : 0.5 , p : ((a.x*b.y)+(b.x*c.y)+(c.x*a.y))-((b.x*a.y)+(c.x*b.y)+(a.x*c.y))}
fmt.Println(math.Abs(triangle.p))
fmt.Println(math.Abs(triangle.con))
trianglearea := triangle.con * triangle.p
fmt.Println("三角形面積為",math.Abs(trianglearea))
}
https://play.golang.org/p/ODtNW2VSynX
這裡我套用三角形的座標面積公式了
並且使用math.Abs的函式來取得絕對值
執行結果
136
0.5
三角形面積為 68