快速上手(三)
创始人
2025-05-30 12:00:00

一、项目

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:\GoPath\src\hello>dir  
hello.go// 编译
F:\GoPath\src\hello>go build// 编译后生成一个 hello.exe 文件,unix 是 hello 可执行文件 ./hello 执行即可
F:\GoPath\src\hello>dir  
hello.go    hello.exe// 执行
F:\GoPath\src\hello>hello.exe                          
Hello World!                                           

其他可选参数:

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

go run

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

go run hello.goF:\GoPath\src\hello>go run -work hello.go
WORK=C:\Users\hj\AppData\Local\Temp\go-build149010642
Hello World!

go install

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

// 切换到项目目录
go install// 查看可执行文件
F:\GoPath\bin>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 mainimport "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 查看。

五、注释

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

相关内容

热门资讯

【Django 网页Web开发... 目录1. 安装第三方模块2. ORM2.1 自己手动创建数据库2.2 django连接数据库2.3 ...
皮燕子是什么(皮燕子是什么动物... 本篇文章极速百科给大家谈谈皮燕子是什么,以及皮燕子是什么动物对应的知识点,希望对各位有所帮助,不要忘...
塑胶跑道的主要材料(塑胶跑道材... 今天给各位分享塑胶跑道的主要材料的知识,其中也会对塑胶跑道材料是由什么组成的进行解释,如果能碰巧解决...
夜天之书 #76 远程工作、开... 上周末在给 Apache Ratis 的代码库上 Maven Wrapper 的时候,...
于加一笔变新字是什么(于加一笔... 本篇文章极速百科给大家谈谈于加一笔变新字是什么,以及于加一笔变一个字对应的知识点,希望对各位有所帮助...
C++ Primer第五版_第... 文章目录练习4.11练习4.12练习4.13练习4.14练习4.15练习4.16练习4.17练习4....
【数据结构】千字深入浅出讲解队... 🚀write in front🚀 📝个人主页...
电子拣货标签3代系统简介 CK_Label_v3 一、产品参数  1. 电池供电版 产品型号 CK_Label_v3 尺...
2023新车上牌费用是多少?上... 今天给各位分享2023新车上牌费用是多少?上牌照需要多少钱的知识,其中也会对2022年上牌进行解释,...
荣事达竟然是美的集团旗下品牌?... 今天给各位分享荣事达竟然是美的集团旗下品牌?!的知识,其中也会对荣事达美的合并了吗进行解释,如果能碰...
火车站次查询(火车站查询车次)... 本篇文章极速百科给大家谈谈火车站次查询,以及火车站查询车次对应的知识点,希望对各位有所帮助,不要忘了...
分集水器的详细使用方法,学会供... 本篇文章极速百科给大家谈谈分集水器的详细使用方法,学会供暖不会再有办法,以及分集水器构造详图对应的知...
c++ error:cross... 最近在写代码的时候,碰到了 crosses initialization of ......
机器学习模型的性能评估方法 动动发财的小手,点个赞吧! 部署模型后,监控其性能对于确保...
俄罗斯土地面积多少平方公里(世... 本篇文章极速百科给大家谈谈俄罗斯土地面积多少平方公里,以及世界领土最大的三个国家对应的知识点,希望对...
ysl83是什么颜色 极速百科... ysl83是什么颜色目录ysl83是什么颜色ysl83是什么颜色圣罗兰纯魅唇膏86号适合黄皮女生素颜...
信用贷款怎么申请,个人信用贷款... 信用贷款怎么申请目录信用贷款怎么申请个人信用贷款怎么贷如何办理个人信用贷款?个人信用贷款怎么贷信用贷...
泾县有哪些景点,泾县十大必去景... 泾县有哪些景点目录泾县有哪些景点泾县十大必去景点泾县旅游景点泾县景点泾县有哪些景点 泾县位于安...
Leveraging Sali... Leveraging Saliency in Single-Stage Multi-Label Co...
ES-数据建模 数据模型是描述现实世界某种现象或者状态的物理抽象,比如我们之前用FSA来描述周老师的一...
进击的巨人大结局,进击的巨人漫... 进击的巨人大结局目录进击的巨人大结局进击的巨人漫画最终结局漫画《进击的巨人》大结局是什么?进击的巨人...
免单活动是什么意思 极速百科网... 免单活动是什么意思目录免单活动是什么意思免单活动是什么意思告诉我,免单是什么意思免单活动是什么意思免...
meld是手机里的什么,mel... meld是什么意思? meld是什么意思?作为全球唯一的标识,作用相当于我们每个人的。扩展资料:查找...
中华什么多奇志(中华什么多奇志... 本篇文章极速百科给大家谈谈中华什么多奇志,以及中华什么多奇志不爱红装爱武装英文对应的知识点,希望对各...
Linux C++实现进程间通... 基本知识 基本知识介绍参考:https://mp.weixin.qq.com/s/oS...
2023年ACM竞赛班 202...  目录 瞎编乱造第一题 瞎编乱造第二题 瞎编乱造第三题 瞎编乱造第四题 瞎编乱造第五题 不是很想编了...
windows安装包管理工具C... Chocolatey介绍Chocolatey 通过使用通用打包格式来管理 Windows 软件的各个...
解决:centos7如何解决网... 遇到此类问题可能会有多重解决方法,需要一个一个的去排除。 1、查看自己的网络设置是不是...
百克特1103是什么意思,请问... 百克特1103是什么意思目录百克特1103是什么意思请问,白克特1101和1103是什么病毒扫地机器...
无话不谈彼此陪伴什么意思,无话... 无话不谈彼此陪伴什么意思目录无话不谈彼此陪伴什么意思无话不谈是什么意思无话可说和无话不谈有什么区别?...