zl程序教程

您现在的位置是:首页 >  其他

当前栏目

快速上手(三)

2023-04-18 16:52:07 时间

一、项目

Go 项目须放在 $GOPATH/src/项目 下,其大致结构如下:

F:GoPath
├── bin
├── pkg
└── src
    └── hello   // 项目1
    |    └── hello.go  // 项目中文件
    └── test   // 项目2
    └── test.go  

1.11 版本后引入 Module 包管理机制,项目文件就可以放在任意目录,也解决了包依赖管理等问题。

二、Go 文件

go 文件已 .go 结尾,命名以小写字母组成,也可以是下划线连接,下面是示例:

hello.go
test_hello.go

代码结构

package main    

import "fmt"    

func main() {
    fmt.Println("Hello World!")
}
  • package main:每个 Go 文件都需要定义 package 包名称,表示当前文件所属的包
  • import fmt:导入一个模块,fmt.Println 打印输出
  • func main() 程序入口函数,因为定义了 package main

三、运行

三种方式运行:

  • go build:编译为二进制(可执行文件),再运行
  • go run:等价于 go build,再执行可执行文件,相当于二者合一
  • go install:编译并将编译文件放在 $GOPATH/src/$GOPATH/pkg/ 目录

go build

// 切换到项目目录,目前只有在一个 hello.go 文件
F:GoPathsrchello>dir  
hello.go

// 编译
F:GoPathsrchello>go build

// 编译后生成一个 hello.exe 文件,unix 是 hello 可执行文件 ./hello 执行即可
F:GoPathsrchello>dir  
hello.go    hello.exe

// 执行
F:GoPathsrchello>hello.exe                          
Hello World!                                           

其他可选参数:

go build -n     // 编译时会显示编译信息
go build -o 名称    // 指定可执行文件名称

go run

可直接运行 go 文件,生成的可执行文件保存在系统临时目录中,可使用:go run -work main.go 查看:

go run hello.go

F:GoPathsrchello>go run -work hello.go
WORK=C:UsershjAppDataLocalTempgo-build149010642
Hello World!

go install

编译并将编译文件放在 $GOPATH/src/$GOPATH/pkg/ 目录

// 切换到项目目录
go install

// 查看可执行文件
F:GoPathin>dir
hello.exe

注意:若项目没 main 包(只是一个类库),则 go install 生成的包文件会放在 $GOPATH/pkg 目录;有 main 包则可执行文件生成在 $GOPATH/bin 目录中

包文件

包文件可以当做一个类库给其他程序使用。

1、创建一个项目 utils 用于生成包文件(类库):

$GOPATH/src/
└── utils
    └── page.go
package utils
/*
实现一个数字相加的功能,接收两个整数,函数内部把两个值相加并返回
*/
func Add(n1 int, n2 int) int {
    return n1 + n2
}

go install 生成包文件:

cd utils
go install

命令执行成功,会在 $GOPATH/pkg/linux_amd64 生成一个 utils.a 的包文件。

2、创建一个新项目 crm,内部调用 utils.a 包文件:

$GOPATH/src/
└── crm
    └── main.go
package main
import (
    "fmt"
    "utils" // 导入utils包
)
func main() {
    // 调用utils包中定义的Add函数
    result := utils.Add(1, 2)
    fmt.Println(result)
}

接下来编译 crm 项目,但不能使用 build、install,否则会直接调用 utils 项目而不是调用 utils.a 包文件,故而需要手动编译:

// 切换到 crm 项目中
cd /src/crm

// 编译main.go
// -I 选项指定了包的安装路径,供main.go导入使用, 编译完成生成 main.o 文件
go tool compile -I $GOPATH/pkg/darwin_amd64 main.go

// 链接main.o
// -L 选项指定了包的安装路径,链接完成之后生成 main 文件(也可以是 main.exe 等其他文件名)
go tool link -o main -L $GOPATH/pkg/darwin_amd64 main.o

// 编译完毕后,会在当前目录生成一个 main 的可执行文件和 main.o 包文件
[root@localhost crm]# ls
main  main.go  main.o

// 执行
[root@localhost crm]# ./main
13

四、输出

go 输出分为两种:

  • 内置函数提供:Print、Pringln 函数,不推荐使用,官方不保证后续会保留次功能,可能会被移除,用于标准错误输出而非标准输出
  • fmt 标准库(推荐)

内置函数

  • print:输出
  • println:输出并在最后位置添加换行符
package main

//import "fmt"


func main() {
    print("输出")
    println("输出1")    // 进行了换行操作
    println("输出2")
}

输出:

[root@localhost test]# go run test.go 
输出输出1
输出2

fmt 标准库

fmt 标准库是官方推荐的输出方式,总共有三种使用方式:

  • fmt.Print:输出
  • fmt.Println:输出并在末尾添加换行符
  • fmt.Printf:格式化输出,第一个参数为占位符的字符串,后面参数用于格式化字符串
package main

import "fmt"


func main() {
    fmt.Print("输出")
    fmt. Println("输出2")
    fmt.Println("输出3")
    fmt.Printf("我的名字叫:%s,今年:%d,我的英文成绩为:%.2f", "rose", 18, 93.20123)
}

输出:

[root@localhost test]# go run test.go 
输出输出2
输出3
我的名字叫:rose,今年:18,我的英文成绩为:93.20

格式化符号

%b    表示为二进制
%c    该值对应的unicode码值
%d    表示为十进制,格式化整型
%o    表示为八进制
%q    该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x    表示为十六进制,使用a-f
%X    表示为十六进制,使用A-F
%U    表示为Unicode格式:U+1234,等价于"U+%04X"
%E    用科学计数法表示
%f    用浮点数表示,十进制小数
%s    格式化字符串
%.2f 保留小数点后两位(四舍五入)

其他格式化占位符,可查看:Go 编译器安装目录/src/fmt/doc.go 查看。

五、注释

  • 单行注释://
  • 多行注释:/* */