分类目录归档:Go

go get


hc@ubt:~$ go get github.com/hyper-carrot/go_lib/logging

命令go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。在上面这个示例中,我们从著名的代码托管站点Github上下载了一个项目(或称代码包),并安装到了环境变量GOPATH中包含的第一个工作区中。与此同时,我们也知道了这个代码包的导入路径就是github.com/hyper-carrot/go_lib/logging。

一般情况下,为了分离自己与第三方的代码,我们会设置两个或更多的工作区。我们现在有一个目录路径为/home/h...

阅读全文...

go clean


执行go clean命令会删除掉执行其它命令时产生的一些文件和目录,包括:

  1. 在使用go build命令时在当前代码包下生成的与包名同名或者与Go源码文件同名的可执行文件。在Windows下,则是与包名同名或者Go源码文件同名且带有“.exe”后缀的文件。

  2. 在执行go test命令并加入-c标记时在当前代码包下生成的以包名加“.test”后缀为名的文件。在Windows下,则是以包名加“.test.exe”后缀为名的文件。我们会在后面专门介绍go test命令。

  3. 如果执行go clean命令时带有标记-i,则会同时删除安装当前代码包时所产生的结果文件。如果当前代码包中只包含库源码文件...

阅读全文...

go build


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

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

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

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

插播: Go语言的源码文件有三大类,即:命令源码文件、库源码文件和...

阅读全文...

go install


命令go install用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。与go build命令一样,传给go install命令的代码包参数应该以导入路径的形式提供。并且,go build命令的绝大多数标记也都可以用于go install命令。实际上,go install命令只比go build命令多做了一件事,即:安装编译后的结果文件到指定目录。

在对go install命令进行详细说明之前,让我们先回顾一下goc2p的目录结构。为了节省篇幅,我在这里隐藏了代码包中的源码文件。如下:

$HOME/golang/goc2p:
...

阅读全文...

go标准命令详解


Go语言的1.5版本在标准命令方面有了重大变更。这倒不是说它们的用法有多大的变化,而是说它们的底层支持已经大变样了。让我们先来对比一下$GOROOT/pkg/tool/<平台相关目录>中的内容。以下简称此目录为Go工具目录。

插播: 平台相关目录即以<GOOS>_<GOARCH>命名的目录,用于存放因特定平台的不同而不同的代码包归档文件或可执行文件。其中,代表特定平台的操作系统代号,而<GOARCH>则代表特定平台的计算架构代号。使用go env命令便可查看它们在你的计算机中的实际值。

1.4版本的Go工具目录的内容如下:

5a      ...

阅读全文...

Go使用Web服务器接收数据


一旦设置了Web服务器并确保它可以提供一些有用的内容,您可能希望通过让它接受数据来使其更具交互性。让我们开始编写一些代码:

package main

 import (
  "net/http"
  "html/template"
 )

 type PAGE struct {
  NAME string
 }

 var page PAGE

 func main() {
  http.HandleFunc("/", servePage)
  http.ListenAndServe(":8080", ni...

阅读全文...

Go Switch


Go的switch语句是if的替代语句。它使用以下语法:

fruit := "apple"
 switch fruit {
    case "banana":
        fmt.Printf("Yellow and long.")
    case "apple":
        fmt.Printf("Red and round.")
    case "lemon":
        fmt.Printf("Yellow and round.&q...

阅读全文...

go范围


要在Go中迭代集合,我们可以使用范围。

范围与for循环不同,因为索引不访问集合中的项。

如果要访问集合中的特定元素,则for循环可能是更好的选项。

这是一个例子:

package main

 import "fmt"

 func main() {
  fruits := []string{"apple", "orange", "pear"}

  for _, fruit := range fruits {
    fmt.Println(fruit)
   }
 }

将输出:

apple
orang...

阅读全文...

go方法


Golang类型可以有方法。方法是具有特殊参数的函数,即接收器

type Rectangle struct {
  height, width int64
 }

 func (r Receiver) getArea() int64 {
  return r.height * r.height
 }

 r := Rectangle{10, 20}
 r.getArea() // 200

这里,类型Rectangle有一个名为getArea的方法,它返回矩形的区域。 这里的接收器是r

此代码相当于:

type Rectangle struct {
  height, width...

阅读全文...

go结构


在Go中,结构用于存储数据和相关功能。一个示例可能是表示用户的结构:

type User struct {
    FirstName string
    LastName  string
    Email     string
    Age       int
 }

在这里,我们可以存储用户的名字,姓氏,电子邮件地址和年龄。该属性的名称后跟我们要存储的数据类型。例如, FirstName属性是一个stringAge属性是一个int

创建对象

要初始化一个新对象,我们可以使用Go简写语法来创建和分配变量。我们可以在此时传递数据,也可以在以后设置数据:

func main()...

阅读全文...