目录
- 面试题连接
- go变量哪些是引用类型,哪些是值类型
- golang中new和make的区别
- go 打印 %v %+v %#v 的区别
- go struct能不能比较
- go defer(for defer),先进后出,后进先出
- select可以用于什么,常用语gorotine的完美退出
面试题连接
https://studygolang.com/articles/17796
go变量哪些是引用类型,哪些是值类型
- 指针:slice,map,chan,指针,interface
- 值类型:int,float,bool,string,array,struct
golang中new和make的区别
- make 仅用来分配及初始化类型为 slice、map、chan 的数据。new 可分配任意类型的数据.
- new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type.
- new 分配的空间被清零, make 分配空间后,会进行初始化.
go 打印 %v %+v %#v 的区别
- %v 只输出所有的值
- %+v 先输出字段名字,再输出该字段的值
- %#v 先输出结构体名字值,再输出结构体(字段名字+字段的值)
package main
import "fmt"
type student struct {
id int32
name string
}
func main() {
a := &student{id: 1, name: "xiaoming"}
fmt.Printf("a=%v \n", a)
fmt.Printf("a=%+v \n", a)
fmt.Printf("a=%#v \n", a)
}
go struct能不能比较
因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型
go defer(for defer),先进后出,后进先出
func b() {
for i := 0; i < 4; i++ {
defer fmt.Print(i)
}
}
select可以用于什么,常用语gorotine的完美退出
golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作
每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作