03、GO语言变量定义、函数

目录

1. 第一个Go程序

 2. Go语言命令

go build命令

go run 命令

go mod init 命令

3.变量的定义

方法1:  var  b int = 1

方法2  var := 4

使用reflect库

4.Go里面的指针

5.Go语言的函数(functions)

5.5实现2个数的加法、减法等

5.6  可变长参数


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
闭包函数是指内部函数可以访问外部函数的局部变量,并且在外部函数执行结束后,依然可以访问和修改这些变量。在Go语言函数也可以作为返回值返回,形成闭包。闭包函数可以用来实现函数式编程的一些特性。 函数式编程是一种编程范式,它将计算过程看作是一系列函数的应用。在函数式编程函数被视为一等公民,可以像其他数据类型一样传递、赋值和返回。函数式编程强调使用纯函数,即不依赖于外部状态和副作用的函数,这样可以提高代码的可读性、可维护性和并发性。 在Go语言,闭包函数函数式编程可以结合使用。通过闭包函数,我们可以在函数内部定义其他函数,并且这些内部函数可以访问外部函数的局部变量。这样就可以实现一些函数式编程的特性,例如高阶函数、柯里化和函数组合等。 以下是一个示例代码,演示了Go语言闭包函数函数式编程的用法: ```go package main import "fmt" // 返回一个闭包函数,用于累加计数 func counter() func() int { count := 0 return func() int { count++ return count } } // 使用高阶函数将一个整数加倍 func double(n int) int { return n * 2 } // 使用高阶函数将两个整数相加 func add(a, b int) int { return a + b } func main() { // 使用闭包函数创建一个计数器 c := counter() // 调用计数器函数,并打印结果 fmt.Println(c()) // 输出: 1 fmt.Println(c()) // 输出: 2 // 使用高阶函数将整数加倍,并打印结果 fmt.Println(double(5)) // 输出: 10 // 使用高阶函数将两个整数相加,并打印结果 fmt.Println(add(3, 4)) // 输出: 7 } ``` 在上面的示例,`counter`函数返回了一个闭包函数,用于实现简单的计数器。`double`函数和`add`函数都是高阶函数,可以作为参数传递给其他函数使用。这些示例展示了Go语言闭包函数函数式编程的一些用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值