go 语言中的结构体方法
结构体名称的大小写有着不同的意义: 小写表示不能被别的包访问
package main import "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 ticket import ( "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); }
有疑问加站长微信联系(非本文作者)