go_2
1. 流程控制
if j:=12;j < 12 { println("sssss") }
switch key { case 'a','b': print()
fallthrough // 默认只穿透一层 case 'b': print() default: print() }
switch 后面可以不带表达式
可以在表达式那定义变量
for i := 1; i < 10; i++ { } ------ j := 1 for j < 10 { println(1) j++ } ---------- for { println(1) } ------ for ; ; { print() } ------ var str = "hello" for i, i2 := range str { println(i2) } i 代表字节位置
break
label: { label2: { break label } } lable2: for i := 0; i < 4; i++ { for j := 0; j < 8; j++ { break lable2 } }
2. 函数
func 函数名(参数列表) (返回值列表){ return }
函数也是一种数据类型 可以赋值给变量,可以当型参传递
func main() { //fmt.Printf("addNumber的类型是%T:",addNumber) fmt.Printf("addNumber2的类型是:%T\n",addNumber2) fmt.Printf("addNumber2的执行结果是:%v\n",addNumber2(addNumber,34)) } func addNumber(a1 int,a2 int) int { return a1+a2 } // 自定义类型 type myFunc func(int,int) int
type myint int
func addNumber2(a3 func(int,int) int,a4 int) int { return a3(a4,a4)+a4 }
// 定义返回值名
func addNumber(a1 int,a2 int) (sum int) {
return a1+a2
}
3. 编译
go build -o bin/my.exe mainpath // 指定别名编译
4. 闭包
函数与外部引用的类型构成一个整体,多次调用外部引用的变量不重新初始化
func AddUpper() func(int) int { n := 10 str := "hello" return func(x int) int { n += x str += string(x) println("str=",str) return n } }
如果用传统的方法需要重复传入参数
5. defer
等函数执行完之后执行等语句 按代码顺序压入栈中,filo 压入栈中的时候值会随着压入
6. 内置函数
字符函数
1. len() 返回utf8的字符数 2. []rune() 适合处理中文遍历 runes := []rune("123尘封") for i2 := range runes { fmt.Printf("%c\n",runes[i2]) } 3. n,err := strconv.Atoi("123g") 字符串转整数 4. s := strconv.Itoa(123) 整数转字符串 5. bytes := []byte("123") 字符串转字节数组 6. s2 := string([]byte{49, 50, 51}) 字节数组转字符串 7. n := strconv.FormatInt(2,2) 返回十进制到其他进制到转换 的字符串形式 8. strings.ContainsAny("hello","l1o") 字符串包含 9. strings.Count("hello","l") 子串个数 10. strings.EqualFold("","") 不区分大小写比较 == 区分大小写 11. strings.Index("avc","a") 第一次出现的位置 -1 不存在 12. ns := strings.Replace("go go hello","go","java",-1) 替换n个字符 -1 代表全部替换 13. strings.TrimSpace(" tb asdf dd") 去除两端的空格 14. strings.Trim(" hello "," o") 去除左右两边的字符 15. strings.TrimLeft(" hello "," o") 去掉左边的字符 16. strings.HasPrefix("","") 以某字符开头
日期函数 1. time.Now() 获取当前时间 2. now.Format("2006-01-02 15:04:05") 日期格式化 3. now.Unix() unix 时间戳 4. new 分配基本类型内存 i := new(int) *i = 100
7. 错误处理
func testError() { defer func() { err := recover() if err != nil { println("error le ", err) } }() n1 := 10 n2 := 0 res := n1 / n2 println("res wa",res) }
8. 自定义错误
func main() { err := throwError("jjj") if err != nil { panic(err) } } func throwError(filename string) (err error) { if filename != "jpg" { return errors.New("读取文件错误。。。") } return nil }
9. 数组
var arr = [3]int{1, 2, 3} var arr1 = [...]int{1,2,2,3}
func changeArrValue(arr *[3]int) { (*arr)[0] = 1 } 数组引用传递可在函数内修改
10. 切片
数据个数不确定的时候可以使用切片
是引用数据类型 相当于一个struct ptr引用 len cap三个属性
创建切片的三种方式 1. var arr1 = [3]int{2,2,3} slice := arr1[0:2]
arr1[start:] start-len
arr1[:end] 0-end
arr1[:] = 0-len()
2. var sl = make([]int,4,10) type len cap 3.var s2 = []int{1,2,3}
4. append(切片,切片...) 把切片全部添加到目标切片中
5. copy(切片,切片)
切片可以重复切片 指向同一个数组空间
数组是byte数组,可以进行切片处理str[4:5]
要修改字符串中的某个字符需要将字符串转化成切片修改完在转为字符串
str := "hello@zzz" slice := []rune(str) 按字符 //slice := []byte(str) 按字节 slice[0] = '姐' fmt.Println(string(slice))
11, 二维数组
var matrix [4][5]int matrix[0][0] = 1
var matrix = [4][5]int{{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}}
遍历二维数组 var matrix = [4][5]int{{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}} for _, v := range matrix { for _, v2 := range v { fmt.Println(v2) } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!