go语言细节汇总

1、原始字符串

func main() {
	s := `功能介绍:
	1、可以拍照
	2、可以打电话`
	fmt.Println(s)
}
 

2、字符串不能用序号取元素指针

func main() {
	s := "abc"
	fmt.Println(&s[1]) //error 636: cannot take the address of s[1]
}

3、range迭代取出的地址是相同的

4、fallthrough进入下一个case,退出case无需break

func main() {
	a := 10
	switch a {
	case 10:
		fmt.Println("hhh")
		fallthrough
	case 11:
		fmt.Println("ggg")
	default:
		fmt.Println("fff")
	}
}

5、函数变参只能由一个,且只能是最后一个

6、recover在延时调用defer内有效,其他返回nil

package main
 
import (
	"fmt"
	"log"
	"runtime/debug"
)
 
func test(f func() int) {
	defer func() {
		if err := recover(); err != nil {
			debug.PrintStack()
			log.Println(err)
		}
	}()
	fmt.Println(f())
}
 
func main() {
	a := 0
	fmt.Println(recover())
 
	test(func() int {
		return 10 / a
	})
 
}

7、channel同步异步

package main
 
import (
	"fmt"
	"sync"
)
 
func main() {
	ch := make(chan int) //缓冲区同步
	var wg sync.WaitGroup
	go func() {
		wg.Add(1)
		defer wg.Done()
		for c := range ch {
			fmt.Println(c)
		}
		fmt.Println("recv over")
	}()
 
	ch <- 1
	ch <- 2
	ch <- 3
	ch <- 4
	ch <- 5
	fmt.Println("send over")
	close(ch)
	wg.Wait()
}
 

8、uintptr被GC当做普通整数对象,不会回收指向的对象占用内存

9、reflect

10、go package

package is folder 包就是文件夹

package name is folder name 包名就是文件夹名字

package path is folder path 包路径就是文件夹路径

否则会出错

11、append、map、len、println都不是关键字,无需包含任何包, 因为它在builtin包里

12、临时转换一个含调用方法的接口

package main
 
import (
	"fmt"
)
 
type person struct {
}
 
func (p *person) print() {
	fmt.Println("person")
}
 
func main() {
	//var p1 interface{print()} = new(person)
	//p1.print()
	var p interface{} = new(person)
	p.(interface {
		print()
	}).print()
}
 

13、map其实就是泛型的概念,只是go不开放给用户,map的对象可以是任意类型包括结构体。map初始化格式要求严格。

m := map[int]string{
		2: "jack",
		3: "marry"}
m := map[int]string{
		2: "jack",
		3: "marry", //没有逗号编译不过
	}
14、




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值