简单介绍一下Golang?
- 谷歌开发的一种系统编程语言;
- 它具有内置的垃圾收集机制;
- 支持高并发;
- 代码可以编译成单个可执行二进制文件,不需要添加库或运行时环境即可在服务器上执行;
- 可以,type Person struct{…}
- 否,泛型是方便的,但是它们在类型系统和运行时的复杂性方面付出了代价。
- Go语言的解决方案就是使用interface{}替代任意类型,简单有效;
- TODO:拓展一下泛型的概念
- go get和go install命令
- go run xxx.go:直接编译并运行go文件,产生的可执行程序在临时文件夹中;
- go build xxx.go:在当前目录产生同名的可执行程序;
- go get mypack:下载包源码到当前GOPATH/src目录下;
- go install mypack:对指定包进行编译安装;
如果mypack是一个类库包,则在当前GOPATH/pkg下生成对应的包文件,
如果mypack是一个含有main主程序的包,则在当前GOPATH/bin下生成可执行程序;
- buffer = nil
在运行时,buffer = nil将启动垃圾回收。 - make()能创建的类型包括:切片,map,管道,三者都是引用类型;(追问:Go语言的引用类型)
- 引用类型的值的内存分配是在堆中的,栈中使用一个地址指向之;
需要回收时,将栈中的指针/引用指向即可nil; - TODO:拓展一下堆栈内存分配
- 数组大小是固定的,切片大小不是。
- 切片在运行时可以动态地增加或减少切片的大小,但数组不可以。
- 使用了内置的添加、复制功能对切片操作。
- 追问:切片的双倍扩容机理
- len()返回切片中的元素个数。
- cap()返回切片的容量即切片可以容纳的元素数量。
- 哈希表在Golang中相当于map,也就是哈希映射。
hash_table := make(map[string]string)