標籤:
go 語言中的結構體方法
結構體名稱的大小寫有著不同的意義: 小寫表示不能被別的包訪問
package mainimport "fmt"type Rect struct {width,height int}func (r *Rect) area() int {return r.width*r.height;}func main() {r:=Rect{width:10,height:10}fmt.Println(r.area());rp:=&r; fmt.Println(rp.area());}
使用結構體來解析xml
首先我們看xml的格式,對於屬性(attr)和節點使用是不一樣的,
具體的使用方式如下
<bulkPmMrDataFile> <fileHeader fileFormatVersion="1.0.3" reportTime="2015-06-18T10:45:00.178+08:00" startTime="2015-06-18T10:30:00.178+08:00" endTime="2015-06-18T10:45:00.178+08:00" period="0"/></bulkPmMrDataFile>
package ticketimport ( "path" "io/ioutil" "fmt" "encoding/xml" "os")type BulkPmMrDataFile struct { FileHeader FileHeader `xml:"fileHeader"` ENB ENB `xml:"eNB"`}type FileHeader struct { FileFormatVersion string `xml:"fileFormatVersion,attr"` ReportTime string `xml:"reportTime,attr"` StartTime string `xml:"startTime,attr"` EndTime string `xml:"endTime,attr"` Period string `xml:"period"`}type ENB struct { Id string `xml:"id,attr"` UserLabel string `xml:"userLabel,attr"` Measurement Measurement `xml:"measurement"`}type Measurement struct { Smr string `xml:"smr"` Object Object `xml:"object"`}type Object struct { Id string `xml:"id,attr"` MmeUeS1apId string `xml:"MmeUeS1apId,attr"` MmeCode string `xml:"MmeCode"` TimeStamp string `xml:"TimeStamp"` V string `xml:"v"`}func CheckEror(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) }}func main() { filename := path.Join("input", "xxxx.xml") content, err := ioutil.ReadFile(filename) fmt.Println(filename); if ( err!=nil) { fmt.Println("open file err") CheckEror(err) } var result BulkPmMrDataFile err=xml.Unmarshal(content, &result) if (err!=nil) { CheckEror(err) } fmt.Println("here"); fmt.Println("report time:"+result.FileHeader.ReportTime); fmt.Println("enb id Object.Id :"+result.ENB.Measurement.Object.V);}
go 語言學習筆計之結構體