自动嵌码

安装Go探针

Go探针与所有第三方模块的安装方式相同。

  • GOPATH模式下安装:

    $ go get github.com/TingYunGo/goagent
    
  • GOMOD模式下安装:

    在应用文件夹下执行:

    $ go mod tidy
    

使用探针嵌码

根据应用使用HTTP框架的不同,需要import不同的路径。

我们以一个使用内置HTTP框架的简单例子说明如何嵌码。

源文件: main.go

代码如下:

package main
import (
    "encoding/json"
    "net/http"
)
func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        header := w.Header()
        header.Set("Cache-Control", "no-cache")
        header.Set("Content-Type", "application/json; charset=utf-8")
        w.WriteHeader(http.StatusOK)
        b, _ := json.Marshal(map[string]interface{}{
            "status": "success",
            "URI":    r.URL.RawQuery,
        })
        w.Write(b)
    })
    http.ListenAndServe(":3000", nil)
}

要对如上这个应用嵌码,在源文件同级目录下,创建tingyun.go文件,内容如下:

package main
import (
    _ "github.com/TingYunGo/goagent"
)

至此,全部嵌码工作已完成。

嵌码说明:此例应用使用了内置HTTP框架,对于内置HTTP框架,需要引入github.com/TingYunGo/goagent。

如果您不确定嵌码要使用哪个/哪些 import 模块路径,可通过查看支持列表了解引用依赖。

获取当前应用的依赖模块:

  • GOMOD 方式:查看go.mod文件,或者使用命令:

    $ go mod graph
    
  • GOPATH 方式:编译时使用 -a -v 参数:

    $ go build -a -v
    

嵌码示例

以开源项目 photoprism 为例,项目地址 https://github.com/photoprism/photoprism。

  • 步骤1:克隆项目。

    $ git clone https://github.com/photoprism/photoprism.git
    
  • 步骤2:确定项目使用哪些框架和库。

    进入项目文件夹,查看 go.mod文件。

    $ cd photoprism
    $ cat go.mod
    

    我们会看到,此项目使用了gin框架,数据库支持:

    postgresql:(github.com/lib/pq)
    postgresql:(github.com/lib/pq)
    sqlite:(github.com/mattn/go-sqlite3)
    
  • 步骤3:查询支持列表确定引用路径,添加源码。

    查看框架支持列表,我们的嵌码操作需要引用两个路径:

    github.com/TingYunGo/goagent/frameworks/gin
    github.com/TingYunGo/goagent/database
    

    在代码目录 internal/photoprism下创建 tingyun.go文件,内容如下:

    package photoprism
    import (
        _ "github.com/TingYunGo/goagent/database"
        _ "github.com/TingYunGo/goagent/frameworks/gin"
    )
    
  • 步骤4:在项目go.mod所在目录下执行 go mod tidy命令,然后编译。

    $ go mod tidy
    $ make
    

以上4个步骤完成后,项目编译和探针嵌码工作就已全部完成。更多自动嵌码示例,请参见使用Go探针嵌码示例

results matching ""

    No results matching ""