03、GO语言变量定义、函数
目录
1. 第一个Go程序
新建一个文件 example.go
// 声明该文件所在包,如果是主程序就是main,不是主程序就写包名
package main
// 导入库,fmt用来处理标准输入输出
import "fmt"
// main函数就是整个函数的入库,main函数所在的报名也必须为‘main’
func main() {
// 调用fmt的Println方法,在屏幕输出信息
fmt.Println("hello,world")
fmt.Println("this is my first Go!")
}
运行结果
[root@localhost go_lianxi]# go run example.go
hello,world
this is my first Go!
Go语法规则:
package main
声明了 main.go 所在的包,Go 语言中使用包来组织代码。一般一个文件夹即一个包,包内可以暴露类型
或方法供其他包使用。
import “fmt”
fmt 是 Go 语言的一个标准库/包,用来处理标准输入输出。
func main
main 函数是整个程序的入口,main 函数所在的包名也必须为 main 。
!!主包中必须包含一个main函数!!
fmt.Println(“Hello World!”)
调用 fmt 包的 Println 方法,打印出 “Hello World!”
其他知识点:
一行代表一个语句结束,多个语句写在同一行,它们则必须使用 ; 人为区分
注释:
单行注释: //
多行注释:/* sth */
标识符:同python标识符规则
先编译再执行
编译成二进制可执行程序,
build
后,你会发现在同级目录下会生成一个同名的可执行文件(无扩展名)
编译后直接运行程序

###################################################
2. Go语言命令
Go
是一门编译型语言,
Go
语言的工具链将源代码及其依赖转换成计算机的机器指令
Go
语言提供的工具都通过一个单独的命令
go
调用,
go
命令有一系列子命令。
最简单的一个子命令就是
run
。这个命令编译一个或多个以
.go
结尾的源文件,链接库文件,并运行最终生成的可执行 文件。
Go
语言原生支持
Unicode
,它可以处理全世界任何语言的文本
###################################################
go build命令
:编译成可执行二进制文件译注:
Windows
系统下生成的可执行文件是
helloworld.exe
,增加
了
.exe
后缀名)
[root@localhost go_lianxi]# ls
example.go
[root@localhost go_lianxi]# go build example.go
[root@localhost go_lianxi]# ls
example example.go
[root@localhost go_lianxi]# ./example
hello,world
this is my first Go!
[root@localhost go_lianxi]# ll
总用量 1724
-rwxr-xr-x. 1 root root 1758476 8月 1 20:55 example
-rw-r--r--. 1 root root 391 8月 1 20:51 example.go
###################################################
go run 命令
运行源代码
[root@localhost go_lianxi]# go run example.go
hello,world
this is my first Go!
###################################################
go mod init 命令
初始化,解决包
# 初始化 go mod init account
# 解决依赖问题(检查,删除错误或者不使用的modules,下载没download的package)
go mod tidy
###################################################
3.变量的定义
几种变量定义的方式:
方法1: var b int = 1
1 package main
2
3 import "fmt"
4
5 func main() {
6 // 变量定义方法1
7 // 如果没有给变量赋值,那么变量会获得与数据类型对应的一个默认值
8 var a int
9 var b int = 1
10 var s1 string = "b"
11 fmt.Println(a,b,s1)
12 }
执行结果:
[root@localhost go_lianxi]# vim var.go
[root@localhost go_lianxi]# go run var.go
0 1 b
###################################################
方法2 var := 4
[root@localhost go_lianxi]# cat var.go
package main
import "fmt"
func main() {
// 变量定义方法1
// 如果没有给变量赋值,那么变量会获得与数据类型对应的一个默认值
var a int
var b int = 1
var s1 string = "b"
fmt.Println(a,b,s1)
// 方法2
c := 4
msg := "msg"
fmt.Println(c,msg)
}
执行结果
[root@localhost go_lianxi]# go run var.go
0 1 b
4 msg
注意,不能定义了变量又不使用,否则会报错
[root@localhost go_lianxi]# go run var.go
# command-line-arguments
./var.go:10:6: s declared but not used
./var.go:11:18: undefined: s1
###################################################
查看变量类型
使用reflect库
package main
import "fmt"
import "reflect"
func main() {
// 变量定义方法1
// 如果没有给变量赋值,那么变量会获得与数据类型对应的一个默认值
var a int
var b int = 1
var s1 string = "b"
fmt.Println(a,b,s1)
// 方法2
c := 4
msg := "msg"
fmt.Println(c,msg)
d := 3.14159
fmt.Println(reflect.TypeOf(b))
fmt.Println(reflect.TypeOf(s1))
fmt.Println(reflect.TypeOf(d))
}
执行结果
[root@localhost go_lianxi]# go run var.go
0 1 b
4 msg
int
string
float64
###################################################
4.Go里面的指针
package main
import "fmt"
import "reflect"
func main() {
// 变量定义方法1
// 如果没有给变量赋值,那么变量会获得与数据类型对应的一个默认值
var a int
var b int = 1
var s1 string = "b"
fmt.Println(a,b,s1)
// 方法2
c := 4
msg := "msg"
fmt.Println(c,msg)
d := 3.14159
fmt.Println(reflect.TypeOf(b))
fmt.Println(reflect.TypeOf(s1))
fmt.Println(reflect.TypeOf(d))
var p *string
// 指针里面是用来存放地址的
p = &msg
fmt.Println(p)
// 修改指针指向对象的值
*p = "hello"
fmt.Println(*p)
fmt.Println(msg)
}
执行结果
[root@localhost go_lianxi]# go run var.go
0 1 b
4 msg
int
string
float64
0xc000010260
hello
hello
###################################################
5.Go语言的函数(functions)
5.1.
基本概念
函数是基本的代码块,⽤于执⾏⼀个任务。
Go
语⾔最少有个
main()
函数。
函数声明告诉了编译器函数的名称,返回类型,和参数。
Go
语⾔标准库提供了多种可动⽤的内置的函数。例如,
len()
函数可以接受不同类型参数并返回该类型的⻓度。如
果我们传⼊的是字符串则返回字符串的⻓度,如果传⼊的是数组,则返回数组中包含的函数个数。
###################################################
5.2.
函数定义
Go
语⾔函数定义格式如下:
func function_name( [parameter list] ) [return_types] {
函数体
}
函数定义解析:
func:函数由 func 开始声明
function_name:函数名称,参数列表和返回值类型构成了函数签名。
parameter list:参数列表,参数就像⼀个占位符,当函数被调⽤时,你可以将值传递给参数,这个值被称为
实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参
数。
return_types:返回类型,函数返回⼀列值。return_types 是该列值的数据类型。有些功能不需要返回值,
函数体
函数参数类型 函数内对形参操作, 是否影响实参?
变量 否
指针 是
数组 否
数组元素 否
slice 是
这种情况下 return_types 不是必须的。
###################################################
5.3.
函数特性
Go
函数
不⽀持
嵌套、重载和默认参数
Go
函数
⽀持
⽆需声明原型、不定⻓度变参、多返回值、命名返回值参数、匿名函数、闭包
定义函数使⽤关键字
func
,且左⼤括号不能另起⼀⾏
函数如果没有返回值,不能使⽤输出函数直接输出
函数也可以作为⼀种类型使⽤
###################################################
5.4.
参数与返回值
⼀个典型的函数定义如下,使⽤关键字
func
,参数可以有多个,返回值也⽀持有多个。特别地,
package main
中的
func main()
约定为可执⾏程序的⼊⼝。
⽆返回值的函数
注意:对于⽆返回值的函数,函数体中不需要也不能进⾏
return
返回
package main
import "fmt"
func funcname() {
fmt.Println("hello world")
}
func main() {
// 调⽤
funcname()
}
###################################################
5.5实现2个数的加法、减法等
[root@localhost src]# cat func01.go
package main
import "fmt"
func main() {
fmt.Println("vim-go")
num := 100
add(num)
// go 调用参数是默认传值过去
fmt.Println(num)
// realadd 传过去的是一个指针,指针指向的是num的地址,
realadd(&num)
fmt.Println(num)
fmt.Println(add2(1,5))
fmt.Println(add3(3,1))
}
func add(num int) {
num +=1
}
func realadd(num *int) {
*num += 1
}
func add2(num1 int, num2 int) (int, int){
return num1+num2, 100
}
func add3(num1 int, num2 int) (ans int, ans2 int){
ans = num1+num2
ans2 = num1-num2
return
}
[root@localhost src]# go run func01.go
vim-go
100
101
6 100
4 2
也可以给返回值命名,简化
return
,例如
add
函数可以改写为
func add(num1 int, num2 int) (ans int) {
ans = num1 + num2
return
}
###################################################
5.6 可变长参数
[root@localhost src]# cat func02.go
package main
import (
"fmt"
"reflect"
)
func main() {
fmt.Println("vim-go")
add(1,2,3,4,5)
}
func add(nums ...int) {
fmt.Println(reflect.TypeOf(nums)) // 输出 []int
fmt.Println(len(nums)) // 输出 5
fmt.Println(nums) // 输出 [1,2,3,4,5]
sum := 0
for i := 0; i < len(nums); i++ {
sum += nums[i] // 输出15
}
fmt.Println(sum)
}
执行结果
[root@localhost src]# go run func02.go
vim-go
[]int
5
[1 2 3 4 5]
15
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通