golang随笔

  1. import引用的是当前gopath目录下的源码文件,gopath可以设置多个
  2. flag StringVar String Parse
  3. go run xx.go --help #查看参数说明
  4. godoc
  5. 同一目录,无子目录的源码文件需要被声明为同一代码包package
  6. internal 模块私有化
  7. 包冲突:设置别名、点操作、匿名方式
  8. 04 变量的重声明
  9. 类型断言 X.(T) interface{}(_)([]String) 空接口 类型字面量
  10. 切片的类型字面量中只有元素的类型,而没有长度
  11. Go 语言的切片类型属于引用类型,同属引用类型的还有字典类型、通道类型、函数类型等;而 Go 语言的数组类型则属于值类型,同属值类型的有基础数据类型以及结构体类型。
  12. 如下图
    在这里插入图片描述
  13. 08container中包含的那些容器
  14. Go 语言字典的键类型不可以是函数类型、字典类型和切片类型。
  15. 并发安全的问题原因? * 多个Goroutine读写同一片内存; 并发安全的实现方式? * 加锁 * sync/atmoic 包 * sync.Mutex、sync.RWMutex * Channel本身支持内存序列,一次只处理一个数据,避免了data race
  16. make支持的数据类型? slice、map、chan
  17. go mod使用,需要先设置为on,初始化go mod init 项目名,在go run时会自动下载依赖,go build ./…,
  18. go get [@v],go mod tidy
  19. go install结果会到gopath里,go get命令会安装在gopath下的src里面(在开启module时,不在$GOPATH\src\,而是去了 $GOPATH\src\pkg)
  20. defer 栈,先进后出,函数结束时发生(在return,panic前执行),参数在defer语句时计算
package main

import "fmt"

func tryDefer() {
	defer fmt.Println(1)
	defer fmt.Println(2)
	fmt.Println(3)
	panic("error")
	return
	fmt.Println(4)
}

func main() {
	tryDefer()
}
运行结果
3
2
1
panic: error

goroutine 1 [running]:
main.tryDefer()
	D:/go-work/src/go-admin/t0104/main.go:9 +0x165
main.main()
	D:/go-work/src/go-admin/t0104/main.go:45 +0x4ce
  1. // 向标准输出写入内容
    fmt.Fprintln(os.Stdout, “向标准输出写入内容”)
  2. bufio.NewWriter() xxx.Flush
  3. test 代码覆盖率 性能测试
  4. goroutine注意不要在主函数执行完之后执行
  5. 非抢占式,如果不交出控制权,会卡死,runtime.Gosched()//交出控制权,io操作,select,channel,等待锁会切换控制权
  6. -race检测数据访问冲突
  7. chan close 检测是否发送完成
  8. sync,waitGroup add done wait
  9. 函数的参数、变量、返回值都可以是函数
  10. 闭包
import "fmt"

func adder() func(int) int {
	sum := 0
	return func(i int) int {
		sum += i
		return sum
	}
}
func main() {
	a := adder()
	for i := 0; i < 10; i++ {
		fmt.Printf("0 + 1 + ... + %d = %d\n", i, a(i))
	}
}
运行结果
0 + 1 + ... + 0 = 0
0 + 1 + ... + 1 = 1
0 + 1 + ... + 2 = 3
0 + 1 + ... + 3 = 6
0 + 1 + ... + 4 = 10
0 + 1 + ... + 5 = 15
0 + 1 + ... + 6 = 21
0 + 1 + ... + 7 = 28
0 + 1 + ... + 8 = 36
0 + 1 + ... + 9 = 45
  1. 斐波那契数列
import "fmt"

func fibonacci() func() int {
	a,b := 0,1
	return func() int {
		a,b = b,a+b
		return a
	}
}

func main() {
	f := fibonacci()
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值