golang基础学习(defer、条件、循环、指针、切片、闭包)


defer
  • 推迟调用,等待函数结束后调用,遇见defer入栈,函数调用完成,逐一出栈
func main() {
	defer fmt.Println("world")
	defer fmt.Println("dddd")
	fmt.Println("hello")
	defer fmt.Println("sss")
	defer fmt.Println("xxx")
}
结果:
hello
xxx
sss
dddd
world

条件判断
func main() {
	i := 0
	if i < 10 {
		fmt.Println("常规条件判断")
	}

	if j := 50; j > 20 {
		fmt.Println("简写判断")
	}
}
Switch判断
  • 遇见fallthrough将会向下走,golang默认进入case后然后自动break,像C#还要自己写break
  • 没有条件的Switch就像Switch true一样
func main() {
	Switch_First("a")
	Switch_First("b")

}

func Switch_First(type_s string) {
	switch str_type := type_s; str_type {
	case "a":
		fmt.Println("a类型")
	case "b":
		fmt.Println("b类型")
		fallthrough
	case "c":
		fmt.Println("c类型")
	default:
		fmt.Println("其他类型")
	}
}

循环
func main() {
	for i := 0; i < 10; i++ {
		fmt.Println("常规循环")
	}

	j := 0
	for j < 10 {
		fmt.Println("省略循环")
		j++
	}

	for {
		fmt.Println("无限循环")
	}
}

指针
  • 结构体指针可以直接隐式引用结构内字段
package main

func main() {
	var ptr *int
	var pptr **int

	temp := 1

	ptr = &temp
	pptr = &ptr

	println("ptr", ptr)          //存放temp的地址
	println("ptr.value", *ptr)   // temp的值
	println("ptr.address", &ptr) // ptr的地址

	println("pptr", pptr) // 存放 ptr的地址
	println("pptr.value", *pptr)
	// pptr指向ptr的地址,ptr指向什么?
	// 所以 *ptr代表 temp的地址
	// **ptr执行 temp的值

	// *ptr 理解 ptr存放的地址 指向什么

}


切片
  • golang切片不同于python,golang的切片是数组的引用,而python的切片是拷贝
  • 切片存在len(长度)、cap(容量),容量代表底层数组元素个数,前切e.g. [2:]会改变容量,如下
func main() {
 a := []int{1, 2, 3, 4, 5, 6}
 fmt.Printf("len=%d, cap=%d\n", len(a), cap(a))
 b := a[:]
 fmt.Printf("len=%d, cap=%d\n", len(b), cap(b))
 c := a[:4]
 fmt.Printf("len=%d, cap=%d\n", len(c), cap(c))
 d := a[2:]
 fmt.Printf("len=%d, cap=%d\n", len(d), cap(d))
 e := d[:2]
 fmt.Printf("len=%d, cap=%d\n", len(e), cap(e))
}
  • 空切片为nil, len = 0, cap = 0

闭包
  • 什么是闭包? 闭包就是函数引用了函数外的变量,下面例子函数fn_1、fn_2使用了函数compute中sum变量
func main() {
	fn_1 := compute()
	fn_1(10)
	res := fn_1(20)
	fmt.Printf("最终结果: %d \n", res)

	fn_2 := compute()
	fn_2(1)
	res_too := fn_2(1)
	fmt.Printf("最终结果: %d\n", res_too)

	结果:
		初始化 Sum = 0
		最终结果: 30 
		初始化 Sum = 0
		最终结果: 2
}

func compute() func(int) int {
	sum := 0
	fmt.Println("初始化 Sum = 0")
	return func(v int) int {
		sum += v
		return sum
	}
}

其他杂项
  • package main中的 main函数才能直接运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值