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 的作用如下:
go.mod
文件中未使用的依赖模块。这样可以清理项目中不再需要的依赖,减少项目的大小。go mod tidy
会检查项目的源代码,并根据导入语句自动添加缺失的依赖模块到 go.mod
文件中。这样可以确保项目的依赖完整,避免编译错误或运行时错误。go.mod
文件中指定的版本要求,检查并更新依赖模块到可用的最新版本。这样可以确保项目使用的依赖模块是最新的,包含了最新的功能和修复#Go函数
func 函数名 (形参列表)(返回值类型列表){
执行语句
return + 返回值列表
}
func add(num1 int, num2 int)(int){
var sum int =0
sum = num1 + num2
return sum
}
#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)
}
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)
}
// 传入指针才可以修改对应变量值
func address(num1 *int){
fmt.Println(num1)
*num1 = 100
}
// 不用指定返回值的类型
func addsub(num1 int, num2 int)(sum int, sub int){
sum = num1 + num2
sub = num1 - num2
// 这里不需要指定返回变量,自动生成return sum ,sub 所以直接写个return即可
return
}
// 传入多个参数
func mostParams(nums...int){
for i :=0 ; i< len(nums); i++ {
fmt.Println("num=",nums[i])
}
}
mostParams(12,2,3,233,23,32,32)
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)
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)
}
type myint int
var num myint = 10
注意这里的myint和int不是同一个类型,这num的类型是 myint类型
----------------------------------------------------
一般用来给函数赋值类型
1.定义一个func(int)的数据类型
type myFunc func(int)
2.定义一个函数testfunc myFunc
func test(testFunc myFunc){
}
3.声明一个变量 变量类型是myFunc
var testMyFunc myFunc
testMyFunc = test
myFunc = oneIntParams
testMyFunc(1)
包主要是为了代码归类更加清晰。
1. 创建文件utils.go
2. 写入内容
package utils
// 计算两个数的和,注意要大写 外部才可以访问
func AddNum(num1 int, num2 int){
// 计算和
return num1 + num2
}
// 手机号校验
func CheckPhone(iphones string){
// 代码逻辑
}
……
3. 在其他函数中进行调用
import "模块名称/路径/utils"
utils.AddNum(1,2)
例如
go mod init 模块名称
import 模块名称/路径/utils
import (
"fmt"
"xxx/xx/xx/xx"
)
在函数调用的时候前面要定位到所在的包
首字母大写,函数可以被其他包使用
一个目录下的不同文件中不能有重复的函数
包名可以和文件夹名不一样。比如文件夹名称是aaa 那么包名可以是package bbb
同一个目录下的同级文件归属一个包,同级别的源文件的包声明必须一致
包是什么
导入的包如何取别名
import(
myfmt "fmt"
)
myfmt.Println("hello world")
首先了解下几个概念
案例
main.go
------------------
package main
import (
"fmt"
"com.gdzs/goproject/src/com/nsfocus/mystudy"
)
func init(){
fmt.Println("init函数执行了")
}
func main(){
fmt.Println("main")
// mystudy.DemoFunc()
mystudy.DemoInit()
}
02.init函数.go
package mystudy
import "fmt"
var Age int = DemoInit()
var Name string = "中国"
func DemoInit() int{
fmt.Println("mystudy/init函数被执行")
return 10
}
func init(){
fmt.Println("mystudy/main函数执行")
fmt.Println("mystudy/main中的Age", Age)
}
执行结果
mystudy/init函数被执行
mystudy/main函数执行
mystudy/main中的Age 10
init函数执行了
main
mystudy/init函数被执行
简介
在Go语言中,main
函数是程序的入口函数,它是程序执行的起点。在main
函数中,可以调用其他函数,但不能再定义函数。
匿名函数
匿名函数定义
func (xxx type, xxx type)(xxx){
}
package main
import (
"fmt"
"com.gdzs/goproject/src/com/nsfocus/mystudy"
)
func init(){
fmt.Println("init函数执行了")
}
func main(){
fmt.Println("匿名函数:")
// 匿名函数
var num1 int = 10
var num2 int = 20
fmt.Println(num1, num2)
num1 ,num2 = func (num1 int, num2 int)(int, int){
return num2, num1
}(num1, num2)
fmt.Println(num1, num2)
}
// 执行结果
init函数执行了
匿名函数:
10 20
20 10
package main
import (
"fmt"
)
func main(){
// 匿名函数赋值
fmt.Println("匿名函数赋值")
nmFunc := func(num1 int)(int){
return 10 * num1
}
fmt.Println(nmFunc)
fmt.Println(nmFunc(10))
}
// 输出结果
匿名函数赋值
0x954040
100
package main
import (
"fmt"
)
// 全局定义
var QJVar = func(num1 int)(int){
return 10 * num1
}
func main(){
fmt.Println(QJVar(20))
}
// 输出结果
200