官术网_书友最值得收藏!

go/token包中的Position表示更詳細的位置信息,它被定義為一個結構體:

type Position struct {
    Filename    string // filename, if any
    Offset      int    // offset, starting at 0
    Line        int    // line number, starting at 1
    Column      int    // column number, starting at 1 (byte count)
}

其中,Filename表示文件名,Offset對應文件內的字節偏移量(從0開始),LineColumn分別對應行列號(從1開始)。比較特殊的是Offset成員,它用于從文件數據定位代碼,但是輸出時會將偏移量轉換為行列號輸出。

輸出位置信息時,根據文件名、行號和列號共有6種組合:

func main() {
    a := token.Position{Filename: "hello.go", Line: 1, Column: 2}
    b := token.Position{Filename: "hello.go", Line: 1}
    c := token.Position{Filename: "hello.go"}

    d := token.Position{Line: 1, Column: 2}
    e := token.Position{Line: 1}
    f := token.Position{Column: 2}

    fmt.Println(a.String())
    fmt.Println(b.String())
    fmt.Println(c.String())
    fmt.Println(d.String())
    fmt.Println(e.String())
    fmt.Println(f.String())
}

實際輸出結果如下:

hello.go:1:2
hello.go:1
hello.go
1:2
1
-

行號從1開始,是必需的信息,如果缺少行號則輸出“-”,表示無效的位置。

主站蜘蛛池模板: 青阳县| 那坡县| 九龙坡区| 和平县| 海城市| 新乡县| 池州市| 班玛县| 永定县| 旌德县| 项城市| 遂宁市| 同仁县| 靖远县| 民丰县| 和龙市| 新河县| 四川省| 大丰市| 饶阳县| 贵港市| 沂源县| 连江县| 兴安县| 柘城县| 潮安县| 五常市| 铜山县| 广安市| 竹北市| 呈贡县| 柳林县| 贵港市| 外汇| 民勤县| 岚皋县| 吐鲁番市| 安溪县| 柳林县| 汉沽区| 凤台县|