【GO语言卵细胞级别教程】04.GO函数介绍

【GO语言卵细胞级别教程】04.GO函数介绍

目录:

0.创建项目

  1. 创建目录

  2. 执行命令加载模块

    cd 02.gostudy目录下

go 复制代码
1.进入目录下
cd 02.gostudy
2.初始化模块变量
go mod init com.gdzs
3.go mod tidy

4.main.go

package main
import (
	"fmt"
	"com.gdzs/goproject/src/com/nsfocus/mystudy"
)
func main(){
	fmt.Println("main")
	mystudy.DemoFunc()
}

5. 01.函数.go文件内容

package mystudy
// 函数模块
import "fmt"
func add(num1 int , num2 int) (int){
	return num1 + num2
}
func DemoFunc(){
	fmt.Println("求和函数")
	sum := add(10, 21)
	fmt.Println("求和结果:", sum)
}

6.执行go run main.go即可 main.go必须要指定相对路径,比如本项目的
D:\07.go\02.gostudy> go run .\goproject\src\com\nsfocus\main\main.go
main
求和函数
求和结果: 31

注意

go mod tidy 的作用如下:

  1. 移除不再使用的依赖:它会检查项目的源代码和导入语句,并删除 go.mod 文件中未使用的依赖模块。这样可以清理项目中不再需要的依赖,减少项目的大小。
  2. 添加缺失的依赖:go mod tidy 会检查项目的源代码,并根据导入语句自动添加缺失的依赖模块到 go.mod 文件中。这样可以确保项目的依赖完整,避免编译错误或运行时错误。
  3. 更新依赖模块:它会根据 go.mod 文件中指定的版本要求,检查并更新依赖模块到可用的最新版本。这样可以确保项目使用的依赖模块是最新的,包含了最新的功能和修复

1.函数的引入

#Go函数

  1. 简介
    函数的定义:就是用于封装重复的内容,做成一个方法,可以输入给你一些输出
    作用:提高代码复用性和可读性
go 复制代码
func 函数名 (形参列表)(返回值类型列表){
  执行语句
  return + 返回值列表
}
  1. 举例
    #Go函数定义
go 复制代码
func add(num1 int, num2 int)(int){
	var sum int =0
	sum = num1 + num2
	return sum
}

2.注意事项

#Go函数注意事项

  1. 函数与函数并列的关系,所以我们定义的函数不能写到main函数中,如下的写法是错误的

  2. 函数名的规范

    1. 和标识符的规范一样:驼峰命名,简单明了
    2. 首字母不能是数字
    3. 首字母大写该函数可以被本包文件以及其他包文件使用类似(java public)
    4. 首字母小写只能被本包文件使用,其他包文件不能使用类似(java private)

3.详细介绍

3.1 形参介绍

  1. 形参可以是0个、1个、多个
    形参作用:接收外来的数据
  2. 返回类型有一个
go 复制代码
package mystudy
// 函数模块
import "fmt"

// 返回值类型有一个,写返回类型
func add(num1 int , num2 int) (int){
	return num1 + num2
}
// 返回值可以不写返回类型,如果只有一个返回类型的话可以不写括号(()
func add2(num1 int, num2 int) int {
	var sum int = 0
	sum = num1 + num2
	return sum
}
func DemoFunc(){
	// fmt.Println("求和函数")
	// sum := add(10, 21)
	// fmt.Println("求和结果:", sum)
	sum2 := add2(19,22)
	fmt.Println("求和结果:", sum2)
}
  1. 返回类型有多个
go 复制代码
package mystudy
// 函数模块
import "fmt"

func add3(num1 int, num2 int)(int, int){
	// 值交换
	return num2, num1
}

func DemoFunc(){
	// fmt.Println("求和函数")
	// sum := add(10, 21)
	// fmt.Println("求和结果:", sum)
	sum2 := add2(19,22)
	fmt.Println("求和结果:", sum2)
	var num1 int = 10
	var num2 int = 20
	fmt.Printf("替换前:sum1:%d, sum2:%d\n", num1, num2)
	num2, num1 = add3(num2, num1)
	fmt.Printf("替换后:sum1:%d, sum2:%d", num1, num2)
}
  1. 想要改变形参的值,需要使用指针。这里传入的是指针,所以可以直接修改得到值
go 复制代码
// 传入指针才可以修改对应变量值
func address(num1 *int){
	fmt.Println(num1)
	*num1 = 100
}
  1. 返回类型不用按照顺序返回,可以使用 (xxx1 int , xxx2 int)
go 复制代码
// 不用指定返回值的类型
func addsub(num1 int, num2 int)(sum int, sub int){
	sum = num1 + num2
	sub = num1 - num2
	// 这里不需要指定返回变量,自动生成return sum ,sub 所以直接写个return即可
	return 
}
  1. 可以传入多个参数:xxx...int
go 复制代码
// 传入多个参数
func mostParams(nums...int){
	for i :=0 ; i< len(nums); i++ {
		fmt.Println("num=",nums[i])
	}
}
mostParams(12,2,3,233,23,32,32)
  1. Golang中函数不支持重载:函数名相同,形参列表不同
  2. 函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了,通过该变量可以对函数调用。
go 复制代码
func mostParams(nums...int){
	for i :=0 ; i< len(nums); i++ {
		fmt.Println("num=",nums[i])
	}
}
separator := strings.Repeat("-", 10)
varMostParams := mostParams
fmt.Println(separator)
varMostParams(32,23,88)
  1. 函数当作一个参数进行传递
go 复制代码
func mostParams(nums...int){
	for i :=0 ; i< len(nums); i++ {
		fmt.Println("num=",nums[i])
	}
}
// 函数当作一个参数传递
func funcParams(funcTest func(...int)){
	funcTest(12,12,12)
}
varMostParams := mostParams
func DemoFunc(){
	funcParams(varMostParams)
}
  1. 自定义数据类型
    这里可以理解为别名也可以,但是类型不是func(int)而是myFunc
go 复制代码
type myint int
var num myint = 10
注意这里的myint和int不是同一个类型,这num的类型是 myint类型
----------------------------------------------------
一般用来
type myFunc func(int)

func test(testFunc myFunc){}
相关推荐
winks31 分钟前
Spring Task的使用
java·后端·spring
Null箘2 分钟前
从零创建一个 Django 项目
后端·python·django
云空6 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
秋意钟12 分钟前
Spring新版本
java·后端·spring
青莳吖16 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
Buleall24 分钟前
期末考学C
java·开发语言
重生之绝世牛码26 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行32 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
Algorithm157641 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明1 小时前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程