iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
1
自我挑戰組

Go從新學系列 第 13

[DAY 13]GO 的 結構(struct)

  • 分享至 

  • xImage
  •  

以往我們在設定變數的時候

設定都往往都是單一的值

那如果今天需要同時表示一個三維的座標的話呢

那今天的主角 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

上一篇
[DAY 12]GO 裡使用map
下一篇
[DAY 14]GO 的指標(Pointer)
系列文
Go從新學26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言