作者简介:
小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。
座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!
学习某一门编程语言时大多是从Hello World开始,殊不知Hello World这段程序中暗含了很多知识点。本篇文章以Golang语言为例,看看Hello World中都包含哪些内容。
首先创建一个hello.go 文件
package main
import "fmt"
func main() {
var text = "Hello World"
fmt.Printf("Jenny say : %s", text)
}
接下来我们一行一行分析其中的奥秘。
表示该 hello.go 文件所在的包是main,package main表示可独立执行的程序,也就是当某个程序文件中包含package main,那么这个文件就是可执行的,且在go中,每个文件都必须归属于一个包。
表示引入包,当程序需要打印相关内容时,则可引入“fmt”包,需要注意以下几点:
引入包时,需要加双引号,import “xxx”
当引入多个包时,可用小括号括起来
import (
"fmt"
"os"
)
func 是关键字,用于定义函数,main() 函数和其它编程语言一样,是程序的主函数,也就是程序的入口,程序从main函数开始,以main函数结束。(但如果有init()函数的话,需要先执行init()函数)
另外,需要注意的是 { 不能单独放在一行,例如
func main()
{ //报错
fmt.Println("hello")
}
编译器会提示语法错误: syntax error: unexpected semicolon or newline before {
项目名为:DemoTest,项目下有两个go文件,分别是main.go 和 demo01.go
//main.go
package main
func main() {
hello()
}
//demo01.go
package main
import "fmt"
func hello() {
fmt.Println("hello world")
}
运行命令:go run main.go demo01.go
➜DemoTest go run main.go
# command-line-arguments
./main.go:3:2: undefined: hello
所以,针对同一个目录下go文件的运行,需要输入如下命令
➜DemoTest go run main.go demo01.go
hello world
在项目DemoTest下创建一个文件,名为test,结构如下:DemoTest→test→demo02.go,demo02.go 内容如下:
package test
import "fmt"
func Say() {
fmt.Println("demo02,hello world")
}
在main函数中 引用Say()函数
package main
import "DemoTest/test"
func main() {
hello()
test.Say()
}
当在控制台运行是 go run main.go demo01.go,可能会遇到 main.go:2:8: package DemoTest/test is not in GOROOT (/usr/local/go/src/DemoTest/test)问题,解决方法如下:
➜ DemoTest go mod init DemoTest
go: creating new go.mod: module DemoTest
go: to add module requirements and sums:
go mod tidy
➜ DemoTest go mod tidy
此时再运行 go run main.go demo01.go
可正常运行。
需要注意的是,不用目录下go文件,不可使用main 包名,可参照demo02.go,改为了package test。
注意:在Go语言中,使用mod来管理包以来问题,go mod tidy 主要用于加载配置第三方路径。
当然你在使用go mod init命令时可能会出现 go: cannot determine module path for source directory /Users/zengzhaoxia/Demotest1 (outside GOPATH, module path must be specified)问题,解决方法如下:
因为go.mod文件第一行的module与你设置的不一样,将ProjectName改为Demotest1,即可解决该问题,也就是说go.mod的module中的名字要和项目名保持一致。
通过var
关键词来定义变量,后续会专门来讲解
fmt.Print("不换行打印1")
fmt.Print("不换行打印2")
/*
输出的结果为:
不换行打印1不换行打印2
*/
fmt.Println("换行打印1")
fmt.Println("换行打印2")
/*
输出的结果为:
换行打印1
换行打印2
*/
表示格式化参数并返回字符串
var str1 = "jenny"
var str = fmt.Sprintf("hello %s",str1)
fmt.Println(str)
/*
输出的结果为:
hello jenny
*/
表示格式化参数并标准输出
var str1 = "jenny"
fmt.Printf("hello %s",str1)
/*
输出的结果为:
hello jenny
*/
注意:在格式化参数中,%d 表示整型数字,%s 表示字符串
Go 程序是如何运行起来的。
➜ go run hello.go
Jenny say : Hello World
➜ go build hello.go
➜ ls
hello hello.go
➜ ./hello
Jenny say : Hello World
注意:go build 后会生成hello 二进制文件,在命令行直接输入./hello,即可运行。
如果你使用的是Windows,那么二进制文件是hello.exe,在命令行直接输入hello.exe即可。
空格通常用于分隔标识符、关键字、运算符和表达式,主要提高代码的可读性,例如
var text = "Hello World"