0%

About Golang

同一个包下调用

多项目管理

  • 关于golang的环境变量:GOPATH 、GOROOT 的具体作用可以问度娘,很多的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    GOPATH 设置两个目录很有用。

    第一个目录作为第三方包的存放位置,第二个目录作为你自己的项目。

    将第三方的GOPATH放置到第一位,这样子 go install 将使用它作为默认的位置。 然后你可以在第二个 GOPATH目录下工作。

    如:设置 GOPATHE:\GOPATH;E:\GO_WORK

    go get 第三方的包的时候将会安装到 E:\GOPATH 下。

    E:\GO_WORK\src下是自己创建的golang工程。

    这样golang工程 和 golang依赖包将会分别存储在两个位置.

关于测试文件

  • 名称以 _test.go 结尾的文件不是由 go build 命令生成的,将通过 go tests 命令运行测试

关于Go的理解

  • Go 不是面向对象的编程 (OOP) 语言,但采用 Go 可以实现许多 OOP 功能。

关于CGO

类型转换

C 语言类型 CGO 类型 Go 语言类型
char C.char byte
singed char C.schar int8
unsigned char C.uchar uint8
short C.short int16
unsigned short C.ushort uint16
int C.int int32
unsigned int C.uint uint32
long C.long int32
unsigned long C.ulong uint32
long long int C.longlong int64
unsigned long long int C.ulonglong uint64
float C.float float32
double C.double float64
size_t C.size_t uint

结构体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
struct A {
int size: 10; // 位字段无法访问
float arr[]; // 零长的数组也无法访问
};
*/
import "C"
import "fmt"

func main() {
var a C.struct_A
fmt.Println(a.size) // 错误: 位字段无法访问
fmt.Println(a.arr) // 错误: 零长的数组也无法访问
}

数组 & 字符串

CGO 的 C 虚拟包提供了以下一组函数,用于 Go 语言和 C 语言之间数组和字符串的双向转换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Go string to C string
// The C string is allocated in the C heap using malloc.
// It is the caller's responsibility to arrange for it to be
// freed, such as by calling C.free (be sure to include stdlib.h
// if C.free is needed).
func C.CString(string) *C.char

// Go []byte slice to C array
// The C array is allocated in the C heap using malloc.
// It is the caller's responsibility to arrange for it to be
// freed, such as by calling C.free (be sure to include stdlib.h
// if C.free is needed).
func C.CBytes([]byte) unsafe.Pointer

// C string to Go string
func C.GoString(*C.char) string

// C data with explicit length to Go string
func C.GoStringN(*C.char, C.int) string

// C data with explicit length to Go []byte
func C.GoBytes(unsafe.Pointer, C.int) []byte

Gin

RESTful API

  • REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作
    • GET用来获取资源
    • POST用来新建资源
    • PUT用来更新资源
    • DELETE用来删除资源

渲染

  • Gin框架中使用LoadHTMLGlob()或者LoadHTMLFiles()方法进行HTML模板渲染

项目管理

  • Golang包管理:GoVender
  • govender 是对Golang的包依赖管理的一个插件,该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。

Reference