本篇文章总结以下go语言包相关的知识

目录

一.导入包

(1)常规导入

(2)别名导入

(3)特殊导入


例如:
import (
    “main/controller
    “net/http

    “github.com/gingonic/gin
)
针对本地包:编译器会根据指定的相对路径搜索然后导入,相对路径
是从GOROOT或GOPATH下的src开始搜索的。
例如:go安装目录GOROOT为/usr/local/go,GOPATH环境变量为~/work:~/code,则搜索net/httpmain/controller按照如下顺序进行
/usr/local/go/main/controller
~/work/main/controller
~/code/main/controller
导入包后就可以使用包中的属性通过包名.属性方式即可。例如fmt包中Println函数:fmt.Println。

例如同时需要导入:network/convert包和file/convert包,调用convert.FUNC()如何区分呢?
答案是为导入的包添加一个名称属性,为包设置一个别名。例如
import {
    nconvertnetwork/convert
    fconvertfile/convert
}
nconvert.FUNC() 和 fconvert.FUNC()即可区分

如果不想在访问属性的时候加上包名,则import导入的时候,可以为其设置特殊的别名:点(.)
例如:
import (
    .”fmt
)
引用时Println即可,不能使用fmt.Println
go要求import导入的包必须在后续中使用,否则会报错。如果要避免这个错误可以在包的前面加上下划线,例如
import {
    “fmt”
    _ “net/http
    “mypkg
}
如上在当前包中就可以使用net/http包。其实这也是给包重命名。只不过命名为”_”,而这个符号表示丢弃复制结果,使其成为一个匿名包。
匿名包并非多此一举,因为导入匿名包时,会进行一些初始化操作(例如init()函数),如果这个初始化操作影响当前包,name这个匿名包就是有意义的。

(1)在目录$GOPATH/src或者$GOROOT/src创建目录(目录名称一般是包名
mkdir main/ypackage
注意:一般建议package的名称和目录名保持一致。
(2)创建go源文件
touch sqrt.go
内容如下
package mypackage

import “fmt”

func Hello() {
    fmt.Println(“Hello World !”)
}

func Sqrt(x float64) float64 {
    z := 0.0
    for i := 0; i < 1000; i++ {
        z -= (z*z – x) / (2 * x)
    }
    return z
}

任意目录执行go install main/mypackage
进入如下目录查看安装结果
cd $GOROOT
./pkg/linux_amd64/main/mypackage.a

test.go文件内容如下:
package main

import (
    “fmt”
    “main/mypackage”
)

func main() {
    fmt.Println(“start …”)
    mypackage.Hello()
    fmt.Println(mypackage.Sqrt(16))
}

go build test.go 
./test

 

go语言一个获取远程包的工具go get,目前go get支持多数开源社区(例如:githubgooglecodebitbucket、Launchpad)
命令
go get github.com/gin-gonic/gin
go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方
命令
go get -u github.com/gin-gonic/gin
通过这个命令可以获取相应的源码对应开源平台采用不同的源码控制工具,例如github采用gitgooglecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具
通过上面获取的代码我们本地的源码相应的代码结构如下

$GOPATH
  src
   |–github.com
          |-gin-gonic
              |-gin
   pkg
    |–相应平台
         |-github.com
               |–gin-gonic
                    |gin.a
go get本质上可以理解为首先第一步是通过源码工具clone代码src下面,然后执行go install

远程包的调用
代码如何使用远程包,很简单的就是和使用本地包一样,只要在开头import相应的路径可以

importgithub.com/gin-gonic/gin”
提醒:bin目录下面存的是编译之后可执行文件,pkg下面存放的是应用包,src下面保存的是应用源代码

       Go中除了main()函数外,还保留了init()函数,这两个函数都不能有任何参数返回值。它们都是在特定的时候自动调用的,无需我们手动执行
每个包中都可以定义init函数,甚至可以定义多个,但建议每个包只定义一个。每次导入包,在导入完成后,且变量常量声明初始化完成后,将会调用这个包中的init()函数
对于main包,如果也定义init,那么它会在main()函数之前执行。当main包中的init()执行完之后,就会立即执行main()含住,然后进入程序

       Gin 是一个用 Go (Golang) 编写web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速度提高了近 40 倍。 如果你是性能和高效的追求者, 你会爱上 Gin.

安装 Gin 软件包需要安装 Go 并设置 Go 工作区。
(1)下载安装 gin
go get -u github.com/gin-gonic/gin
(2)gin 引入
import “github.com/gin-gonic/gin”
(3)(可选)如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包:
import “net/http

package main

import “github.com/gin-gonic/gin”

func main() {
    r := gin.Default()
    // 返回一个json数据
    r.GET(“/ping“, func(c *gin.Context) {
        c.JSON(200, gin.H{
            “message”: “pong”,
        })
    })
    
    // 返回一个html页面
    r.LoadHTMLGlob(“templates/*”)
    r.GET(“/index“, func(c *gin.Context) {
        c.HTML(http.StatusOK, “index.html“,nil)
    })
    r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}

代码结构

运行结果: 

 

 

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注