iT邦幫忙

4

蠻可愛的golang #28 - 結構 Struct 與reflect 應用

昨天總裁有問可不可以取結構裡面的值??
前面範例介紹結構時,就有直接取值來列印了.
請參考 http://ithelp.ithome.com.tw/question/10153641
至於透過reflect間接的方式,是留到今天講的.
其實昨天的範例,第三個欄位,字是拼錯的.

// hello32
package main

import (
	"fmt"
	"reflect"
)

type Eagle struct {
	field1 bool   "性別"
	field2 string "姓名"
	filed3 int    "體重"
	//^^^^^^
	// 這裡字拼錯的
}

func main() {
	LittleEagle := Eagle{true, "小鷹", 85}

	// 知道欄位名稱時的方式,就是直接取用啊!
	// 要用拼錯的 filed 才可以喔
	fmt.Printf("%d\n", LittleEagle.filed3)

	// 間接方式
	// 取出第三個欄位名稱,管他是否有拼錯,抓來用.
	// 由0開始,故index值是 2
	field_name := reflect.TypeOf(LittleEagle).Field(2).Name

	// 取值的方法 要用 ValueOf
	val := reflect.ValueOf(LittleEagle)
	// 搭配上面取得的 欄位名稱
	weight1 := val.FieldByName(field_name).Int()
	fmt.Printf("%d\n", weight1)
}

執行結果:

λ ./hello32 
85
85

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
總裁
iT邦好手 1 級 ‧ 2014-08-07 16:53:42

再來不會出現try catch吧....暈

golang 的錯誤處理機制, 與 try catch 流不同.

我要留言

立即登入留言