go语言2
所有文件内的package必须一样(可以改别名,但是各个文件内的别名要一样)
-函数高级
-
闭包函数
闭包函数:定义在函数内部,对外部作用有引用 内层函数:定义在函数内部的函数 //(重点) go中函数内部定义的函数是不能有名的,需要定义匿名函数:没有名字 func testt(a int) { func() { fmt.Println("我是内层函数") }()//此处,内部函数定义了,就必须使用!!或者赋值给变量 } func testt(a int) (func()) {//func()是它的返回类型为函数! //var c int =100 b:= func() { fmt.Println(a) fmt.Println("我是闭包函数") } return b } func testt(a int) func(){ b:= func() { fmt.Println(a) fmt.Println("我是内部的函数") } return b } func main() { a:=testt(111111) a() }
-
类型命别名
type MyInt int var a MyInt=10 var b int =90 a=MyInt(b) fmt.Println(a)
-if-else
-
-基本用法
if 条件{ }else if 条件{ }else{ }
-
-在条件中可以定义变量
if a:=80;a>90{ }
-包
-
前言:其实就是导模块
-新建一个文件夹,内部写很多go文件,但是包名必须一致 -如果想在外部包使用,首字母必须大写;小写则是内部使用 -在其他包中使用 -import "mypackage" -mypackage.Test1() -下载第三方包 go get github.com/astaxie/beego beego、gin
-
实例
mypackage 1
package mypackage func test(a,b int ) int { //fmt.Println(a+b) return a+b }
mypackage 2
package mypackage import "fmt" func Test2() { fmt.Println(test(1,2))// 那边return才能用 fmt.Println("这里是Test2") }
调用
// 包的使用 package main import "mypackage" import "fmt" func main() { //想使用mypackage包下的test函数和test1函数 mypackage.Test2() fmt.Println("这里是S3") }
-循环
-switch语句
-
switch相当于if-else
//基本用法 a:=10 switch a { case 1: fmt.Println("1") case 2: fmt.Println("2") case 10: fmt.Println("10") }
-
default相当于else:最后其他情况
-
多值匹配
a:=11 switch a { case 1,4,5: fmt.Println("1") case 2,8,9: fmt.Println("2") case 10,11: fmt.Println("10") default: fmt.Println("不知道") }
-
无表达式的 switch:相当于a写在内部
a:=11 switch { case a > 10: fmt.Println("大于10") case a < 10: fmt.Println("小于10") default: fmt.Println("10") }
-
Fallthrough(坠落,穿过):达到条件,继续执行一个
//Fallthrough a := 1 switch a { case 1: fmt.Println("1") fmt.Println("xxxx") //穿透,无条件执行下一个case的内容 fallthrough case 11: fmt.Println("11") test5()
-数组和切片
-
定义
//数组 在定义阶段,长度和类型就固定了,以后不能更改 var a [5]int //定义了一个长度为5的int类型数组
-
指定数组位置的值
//第99个位置设为99 a :=[100]int{1,2,98:99,87:88} fmt.Println(a)
-
数组是值类型
// 所有的函数传参都是copy传递 //所有的函数传参都是copy传递,不会影响本身 a:=[4]int{1,2,3} test6(a) fmt.Println(a,"111") func test6(b [4]int) { b[0]=100 fmt.Println(b) }
-
数组迭代(取值)
var a=[4]int{1,2,} for i:=0;i<len(a);i++{ fmt.Println(a[i]) }
-
通过range迭代
var a=[4]int{1,2,} for i,_ := range a{ fmt.Println("----",i) }
-
-
多维数组
//多维数组 var a [7][2]int//产生一个7位数字类型两两一对的数组 a[0][1]=100 fmt.Println(a)
编译型语言和位置无关
同一包下,无需导入,直接使用
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验