共计 882 个字符,预计需要花费 3 分钟才能阅读完成。
1.int 类型和 float 类型不能匹配
go 语言规定不容许在整数型变量和浮点型变量之间进行任何数学运算。谬误例子如下:
var n, m = 21, 2.1
// 上面一行会报错:invalid operation: n / m (mismatched types int and float64)
fmt.Println(n / m)
改过后果如下:
var n = 21 / 2.1
fmt.Println(n)
2.int 类型和 time.Duration 类型不能匹配
go 语言规定数值运算的操作数必须具备雷同的类型,除非该操作蕴含类型转换或非类型化常量。谬误例子如下:
var n = 3
// 上面一行会报错:invalid operation: timeout * time.Millisecond (mismatched types int and time.Duration)
fmt.Println(n * time.Millisecond)
改过后果如下:
// 1. 应用常量
const n = 3
fmt.Println(n * time.Millisecond)
// 2. 应用雷同类型
var n time.Duration = 10
fmt.Println(n * time.Millisecond)
3. 构造体 struct
1)申明指针构造体时,如果未初始化,则初始值为 nil,因而只有初始化后,能力拜访字段或为字段赋值。例子如下:
type City struct {Name string}
var c *City
// 谬误用法, 未初始化, c 为 nil
c.Name = "Osaka"
c = &City{}
// 初始化后,构造体指针指向某个构造体地址,能力拜访字段,为字段赋值
c.Name = "Tokyo"
// 因而,罕用的做法如下
c := &City{}
c.Name = "London"
2)应用 Go 内置 new() 函数,能够分配内存来初始化构造休,并返回调配的内存指针,因为曾经初始化了,所以能够间接拜访字段。例子如下:
var c = new(City)
c.Name = "NewYork"
其余诸如申明一个 map 不能立刻赋值,类型断言失败会 panic,二次敞开一个 channel 也会 panic 等比拟常见的就临时不具体介绍啦
正文完