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

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開始,是必需的信息,如果缺少行號則輸出“-”,表示無效的位置。

主站蜘蛛池模板: 保德县| 茌平县| 克拉玛依市| 剑河县| 澄江县| 巴南区| 睢宁县| 牟定县| 泰宁县| 沁水县| 马关县| 漳浦县| 罗城| 依安县| 通道| 余姚市| 苍山县| 柳江县| 吕梁市| 沙坪坝区| 芜湖市| 泰和县| 中山市| 江川县| 通山县| 泸溪县| 蒙阴县| 敦化市| 鲜城| 遵化市| 阿尔山市| 乐安县| 赫章县| 黄龙县| 石嘴山市| 商洛市| 杂多县| 工布江达县| 翼城县| 正宁县| 雅安市|