不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2017-10-29 10:18:56  修改时间:2024-07-12 07:53:06  分类:14.Golang/Ruby  编辑

cgo 也是一个 Go 语言自带的特殊工具。一般情况下,我们使用命令 go tool cgo 来运行它。这个工具可以使我们创建能够调用 C 语言代码的 Go 语言源码文件。这使得我们可以使用 Go 语言代码去封装一些 C 语言的代码库,并提供给 Go 语言代码或项目使用。

作者:Albert.Wen  添加时间:2017-10-29 09:53:17  修改时间:2024-06-30 23:20:47  分类:14.Golang/Ruby  编辑

Golang 的 Cookie

web 开发免不了要和 cookie 打交道。Go 的 http 库也提供了 cookie 的相关操作。

type Cookie struct {
  Name       string
  Value      string
  Path       string
  Domain     string
  Expires    time.Time
  RawExpires string
  MaxAge     int
  Secure     bool
  HttpOnly   bool
  Raw        string
  Unparsed   []string
}

Name 字段为 cookie 的名字,Value 是其值,剩下的 Path 和 Domain 则是 cookie 的存储的范围。Expires 是 cookie 的过期时间,如果不设置,那么这是一个 session 型的 cookie,即浏览器会话有用,一旦关闭浏览器,cookie 随即会被删除。

作者:Albert.Wen  添加时间:2017-10-29 20:56:39  修改时间:2024-07-08 08:30:52  分类:14.Golang/Ruby  编辑
package main

import (
    "fmt"
)

type A struct {
    Text string
    Name string
}

func (a *A) Say() {
    fmt.Printf("A::Say():%s\n", a.Text)
}

type B struct {
    A
    Name string
}

func (b *B) Say() {
    b.A.Say()
    fmt.Printf("B::Say():%s\n", b.Text)
}

func main() {
    b := B{A{"hello, world", "张三"}, "李四"}

    b.Say()
    fmt.Println("b的名字为:", b.Name)

    // 如果要显示 B 的 Name 值
    fmt.Println("b的名字为:", b.A.Name)
}

输出:

A::Say():hello, world
B::Say():hello, world
b的名字为: 李四
b的名字为: 张三
作者:Albert.Wen  添加时间:2017-10-29 10:17:32  修改时间:2024-06-26 11:07:35  分类:14.Golang/Ruby  编辑

命令 go vet 是一个 用于检查 Go 语言源码中静态错误的简单工具。与大多数 Go 命令一样,go vet 命令可以接受 -n 标记和 -x 标记。-n 标记用于只打印流程中执行的命令而不真正执行它们。-n 标记也用于打印流程中执行的命令,但不会取消这些命令的执行。示例如下:

hc@ubt:~$ go vet -n pkgtool
/usr/local/go/pkg/tool/linux_386/vet golang/goc2p/src/pkgtool/envir.go golang/goc2p/src/pkgtool/envir_test.go golang/goc2p/src/pkgtool/fpath.go golang/goc2p/src/pkgtool/ipath.go golang/goc2p/src/pkgtool/pnode.go golang/goc2p/src/pkgtool/util.go golang/goc2p/src/pkgtool/util_test.go
#
#
作者:Albert.Wen  添加时间:2017-10-29 21:00:50  修改时间:2024-07-25 22:12:06  分类:14.Golang/Ruby  编辑

nil是什么

相信写过Golang的程序员对下面一段代码是非常非常熟悉的了:

if err != nil {
    // do something....
}

当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常。那什么是nil呢?查一下词典可以知道,nil的意思是无,或者是零值。零值,zero value,是不是有点熟悉?在Go语言中,如果你声明了一个变量但是没有对它进行赋值操作,那么这个变量就会有一个类型的默认零值。

作者:Albert.Wen  添加时间:2017-10-27 13:07:29  修改时间:2024-06-29 21:47:50  分类:14.Golang/Ruby  编辑

字典是一种内置的数据结构,用来保存 键值对 的 无序集合。

(1)字典的创建

1) make(map[KeyType]ValueType, initialCapacity)

2) make(map[KeyType]ValueType)

3) map[KeyType]ValueType{}

4) map[KeyType]ValueType{key1 : value1, key2 : value2, ... , keyN : valueN}

作者:Albert.Wen  添加时间:2012-05-26 17:33:37  修改时间:2024-07-26 02:49:57  分类:14.Golang/Ruby  编辑

安装dep

等到dep正式集成到Golang中时候,也许是Golang 1.10 ,广大吃瓜群众就可以直接使用go dep命令。现在还是需要自己安装的。

$ go get -u github.com/golang/dep/cmd/dep

作者:Albert.Wen  添加时间:2017-10-29 10:13:53  修改时间:2024-07-18 00:02:20  分类:14.Golang/Ruby  编辑

Go 源码文件包括:命令源码文件库源码文件测试源码文件。其中,命令源码文件 总应该属于 main 代码包,且在其中有无参数声明、无结果声明的 main 函数。单个命令源码文件可以被单独编译,也可以被单独安装(可能需要设置环境变量 GOBIN)。当然,命令源码文件也可以被单独运行。我们想要运行 命令源码文件 就需要使用命令 go run

作者:Albert.Wen  添加时间:2017-10-29 10:25:45  修改时间:2024-07-18 02:13:22  分类:14.Golang/Ruby  编辑

现在的 Go 版本是 1.8,早在 1.5 时期,就有了 Vendor 包机制,详情可查看博文:“理解 Go 1.5 vendor”。

遇到的问题

个人在使用 Glide 管理 Vendor 包时(附:Golang Vendor 包管理工具 glide 使用教程),老编译不成功! 后来猛地发现,原来是我对 Vendor 包机制理解不够深入导致的。

Glide 官方教程中提供了一个 Demo 项目结构,如下所示:

$GOPATH/src/myProject (Your project)
  |
  |-- glide.yaml
  |
  |-- glide.lock
  |
  |-- main.go (Your main go code can live here)
  |
  |-- mySubpackage (You can create your own subpackages, too)
  |    |
  |    |-- foo.go
  |
  |-- vendor
       |-- github.com
            |
            |-- Masterminds
                  |
                  |-- ... etc.
作者:Albert.Wen  添加时间:2017-10-29 10:04:57  修改时间:2024-07-22 14:01:21  分类:14.Golang/Ruby  编辑

go build 命令用于编译我们 指定的  源码文件代码包 以及它们的依赖包

例如,如果我们在执行 go build 命令时不后跟任何代码包,那么命令将试图编译当前目录所对应的代码包。例如,我们想编译 goc2p 项目的代码包 logging。其中一个方法是进入 logging 目录并直接执行该命令:

hc@ubt:~/golang/goc2p/src/logging$ go build

因为在代码包 logging 中只有库源码文件和测试源码文件,所以在执行 go build 命令之后不会在当前目录和 goc2p 项目的 pkg 目录中产生任何文件。