快速上手(三)

Love The Way You Lie 2023-09-29 23:40 140阅读 0赞

一、项目

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

  1. F:\GoPath
  2. ├── bin
  3. ├── pkg
  4. └── src
  5. └── hello // 项目1
  6. | └── hello.go // 项目中文件
  7. └── test // 项目2
  8. └── test.go

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

二、Go 文件

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

  1. hello.go
  2. test_hello.go

代码结构

  1. package main
  2. import "fmt"
  3. func main() {
  4. fmt.Println("Hello World!")
  5. }
  • 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

  1. // 切换到项目目录,目前只有在一个 hello.go 文件
  2. F:\GoPath\src\hello>dir
  3. hello.go
  4. // 编译
  5. F:\GoPath\src\hello>go build
  6. // 编译后生成一个 hello.exe 文件,unix 是 hello 可执行文件 ./hello 执行即可
  7. F:\GoPath\src\hello>dir
  8. hello.go hello.exe
  9. // 执行
  10. F:\GoPath\src\hello>hello.exe
  11. Hello World!

其他可选参数:

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

go run

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

  1. go run hello.go
  2. F:\GoPath\src\hello>go run -work hello.go
  3. WORK=C:\Users\hj\AppData\Local\Temp\go-build149010642
  4. Hello World!

go install

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

  1. // 切换到项目目录
  2. go install
  3. // 查看可执行文件
  4. F:\GoPath\bin>dir
  5. hello.exe

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

包文件

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

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

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

go install 生成包文件:

  1. cd utils
  2. go install

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

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

  1. $GOPATH/src/
  2. └── crm
  3. └── main.go
  4. package main
  5. import (
  6. "fmt"
  7. "utils" // 导入utils包
  8. )
  9. func main() {
  10. // 调用utils包中定义的Add函数
  11. result := utils.Add(1, 2)
  12. fmt.Println(result)
  13. }

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

  1. // 切换到 crm 项目中
  2. cd /src/crm
  3. // 编译main.go
  4. // -I 选项指定了包的安装路径,供main.go导入使用, 编译完成生成 main.o 文件
  5. go tool compile -I $GOPATH/pkg/darwin_amd64 main.go
  6. // 链接main.o
  7. // -L 选项指定了包的安装路径,链接完成之后生成 main 文件(也可以是 main.exe 等其他文件名)
  8. go tool link -o main -L $GOPATH/pkg/darwin_amd64 main.o
  9. // 编译完毕后,会在当前目录生成一个 main 的可执行文件和 main.o 包文件
  10. [root@localhost crm]# ls
  11. main main.go main.o
  12. // 执行
  13. [root@localhost crm]# ./main
  14. 13

四、输出

go 输出分为两种:

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

内置函数

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

    package main

    //import “fmt”

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

输出:

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

fmt 标准库

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

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

    package main

    import “fmt”

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

输出:

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

格式化符号

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

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

五、注释

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

发表评论

表情:
评论列表 (有 0 条评论,140人围观)

还没有评论,来说两句吧...

相关阅读

    相关 markdown快速

    > markdown真的是简洁高效,,5分钟,快速上手markdown! -------------------- 首先,来安利一个软件[Typora][],强大不需要理由