ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ค๋ฅธ ์ธ์ด์์๋ ํํ ํ ์ ์๋ XML ํ์ผ Parser๋ฅผ Golang ์ ๊ฐ์ง๊ณ ๊ตฌํํด๋ณด์์ต๋๋ค.
์ ๋ณดํต Node.js๋ ์์ javascript์ ์ฝ๋๋ฅผ ์ด์ฉํด ์๋์ XML ํ์ผ์ ํ์ฑํ์ฌ ์ฌ์ฉํ์๋๋ฐ
๋๋์ XML ํ์ผ ๋ถ์์ ํ๊ธฐ์๋ ์ฑ๊ธ์ค๋ ๋ ๊ธฐ๋ฐ์ธ Node.js ์ ์ฒ๋ฆฌ๋ฐฉ์์ด ๋ถ์ ํฉํ๋ค๊ณ ์๊ฐํ์ฌ
์ถํ์๋ Go ์ ์ฅ์ ์ธ ๊ณ ๋ฃจํด์ ํ์ฉํ ๋ฉํฐ์ฐ๋ ๋ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ค์์ ํ์ผ XML ํ์ผ ํ์ฑ์ ๊ตฌํํด๋ณด๋ ค ํฉ๋๋ค.
์์ง Golang ์ ๋ํ ์ฌ์ฉ๋ฒ์ด ์ต์์น์์ ์ด ์์ค์ฝ๋๋ ๋จ๊ฑด XML ํ์ผ์ ๋ํ ํ์ฑ์ ๊ตฌํํ์์ต๋๋ค.
์์ค์ฝ๋ ๊ตฌ์ฑ์ mainํ์ผ๊ณผ parser ํ์ผ๋ก ๊ต์ฅํ ๋จ์ํฉ๋๋ค. main ์ฝ๋์์ parser ์ฝ๋์ ์๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ตฌ์กฐ์ ๋๋ค.
[utils/parser.go]
package utils
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
type Gpx struct {
XMLName xml.Name `xml:"gpx"`
Trk Trk `xml:"trk"`
}
type Trk struct {
XMLName xml.Name `xml:"trk"`
Name Name `xml:"name"`
Trkseg Trkseg `xml:"trkseg"`
}
type Name struct {
Name string `xml:"name"`
}
type Trkseg struct {
XMLName xml.Name `xml:"trkseg"`
Trkpt []Trkpt `xml:"trkpt"`
}
type Trkpt struct {
XMLName xml.Name `xml:"trkpt"`
Lat string `xml:"lat,attr"`
Lon string `xml:"lon,attr"`
Ele string `xml:"ele"`
Time string `xml:"time"`
}
func Run() {
// ํ๋ก์ ํธ root ๊ฒฝ๋ก ๊ธฐ์ค
p := filepath.Join("./files", filepath.Base("20210320143858.gpx"))
fp, err := os.Open(p)
if err != nil {
panic(err)
}
defer fp.Close()
// xml ํ์ผ ์ฝ๊ธฐ
data, err := ioutil.ReadAll(fp)
// xml ๋์ฝ๋ฉ
var Gpx Gpx
xmlerr := xml.Unmarshal(data, &Gpx)
if xmlerr != nil {
panic(xmlerr)
}
for index, coord := range Gpx.Trk.Trkseg.Trkpt {
fmt.Printf("[index : %d] lat : %s, lon: %s", index, coord.Lat, coord.Lon)
}
}
์ํ XML ํ์ผ์ ํ๊ทธ๊ตฌ์กฐ๊ฐ ์ชผ๊ธ ๋ณต์กํ์ฌ Type ์ ์๊ฐ ์ข ๋ณต์กํด๋ณด์ผ ์ ์์ต๋๋ค.
์ต์๋จ์ Tag๋ถํฐ ์ตํ์ ๋ ๋ฒจ์ ํ๊ทธ๋ฅผ ์์๋๋ก Type ์ ์ํ๋ค๊ณ ์๊ฐํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
Type ์ ์ ํ์ ํ์ผ์ ์ฝ๊ณ , ๋ฐ๋ณต๋ฌธ์ ํตํด ํน์ ํ๊ทธ๋ฅผ printํ๋ ๊ตฌ์กฐ์ ๋๋ค.
[main.go]
package main
import (
"go_parser/utils"
)
func main() {
utils.Run()
}
main ํ์ผ์ parser.go ํ์ผ์์ ์ ์ํ Run ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ๋ค์ ๋๋ค. ๋ฌผ๋ก Golang์ ๋ด์ฉ์ ๊ณต๋ถํ์๋ฉด ์์๊ฒ ์ง๋ง
importํ ํจ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋น ํจ์์ ๋งจ ์ ๋ฌธ์๋ ๋ฐ๋์ ๋๋ฌธ์๋ก ์์ฑํ์๋ ๊ฒ์ ํ์์ ๋๋ค.
[์์ค ์ ๋ฌธ]
- Total
- Today
- Yesterday
- JavaScript
- nestjs directory
- sequelize
- @nestjs/config
- nestjs config
- Request_Limit_Exceeded
- Promise bulk
- node.js
- android
- ๋น๋๊ธฐ ์์ฒญ
- nestjs configService
- ๊ธฐ์์ฒญAPI
- nestjs/cli
- Promise error
- nestjs project
- nestjs doc
- ์๊ณ ๋ฆฌ์ฆ
- node.js backend
- ํ๋ก๊ทธ๋๋จธ์ค
- backend-framework
- typeorm ์ฐ๊ฒฐ
- docker mysql
- nestjs typeorm
- foreignkey
- DeferredResult
- typeorm
- Spring
- NestJS
- Spring Async
- nestjs module
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |