标签:
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); }
标签:
原文地址:http://www.cnblogs.com/witwave/p/4635148.html