Go语言总结

Golang Summary

Posted by BY on November 17, 2020

细节 1:

type S struct{
    a int
}

func ret(i int) (s *S) {
    defer func() {
        fmt.Print(s)
    } ()
    s = &S{a:10}
    if 1 == i {
       
        return 
    }
    return nil //这个地方会改变defer里s的值   
}

例如在函数中,可能需要这样写比较安全

func funcName() (ret type) { //type里含有需要释放的资源
	ret.Init() //type类型的ret变量初始化
	temp := ret //重点,保证ret里资源能够顺利释放
	defer func() {
		temp.Close() //重点,type类型的ret变量释放资源
	} ()
	if XXX {
		return nil  //代码走这里ret值会为空
	}
	return ret
}

细节 2:

func main() {
	a := []int{10,11,12,13}
	fmt.Printf("%p %#v\n", a, a)
	b := a[:0]
	fmt.Printf("%p %#v\n", b, b)
	b = append(b, 1)
	fmt.Printf("%p %#v\n", a, a)
	fmt.Printf("%p %#v\n", b, b)
}
func main() {
	a := []int{10,11,12,13}
	fmt.Printf("slice address: %p - array address: %p - slice value: %#v\n", &a, a, a)
	a = a[:0]
	fmt.Printf("slice address: %p - array address: %p - slice value: %#v\n", &a, a, a)
	b := a[:0]
	fmt.Printf("slice address: %p - array address: %p - slice value: %#v\n", &b, b, b)
}