func add[T ~int | ~int8 | ~int16 | ~int32 | ~int64](x, y T) T {
r := x + y
if (x^r)&(y^r) < 0 {
panic("overflow")
}
return r
}
func subtract[T ~int | ~int8 | ~int16 | ~int32 | ~int64](x, y T) T {
r := x - y
if (x^y)&(x^r) < 0 {
panic("overflow")
}
return r
}
标记
两个返回值中前者命名了,error也要命名变量
定義回傳值的部份,int 參數已給予變數名稱 (total),error參數也要給予變數名稱。 或者 int 參數的變數名稱也拿掉。
因為裡面實際回傳是使用
return x+y, nil
,並未使用回傳變數名稱。 所以應該拿掉變數名稱比較恰當。打卡
mark
ok
返回值中的 error 类型也需要定义参数。 或者返回值中使用:
打卡
mk
打卡。。。。。。
mark
mark
在函数有多个返回值时,只要有一个返回值有命名,其他的也必须命名
打卡
第三次打卡,在函数有多个返回值时,只要有一个返回值有命名,其他的也必须命名
知识盲区,了解到了
多个返回值,有一个具名了,剩下的都要具名
func sum(x, y int)(int, error) 或者 func sum(x, y int)(total int, err error) 都可以
函数多返回值只要有一个返回值有命名,其他的也必须命名
func sum(x, y int)(total int, error) { return x+y, nil } 答案:第二个返回值没有命名。
解析:
在函数有多个返回值时,只要有一个返回值有命名,其他的也必须命名。如果有多个返回值必须加上括号();如果只有一个返回值且命名也必须加上括号()。这里的第一个返回值有命名 total,第二个没有命名,所以错误。
在函数有多个返回值时,只要有一个返回值有命名,其他的也必须命名。如果有多个返回值必须加上括号();如果只有一个返回值且命名也必须加上括号()。
mark。、。、。、
mark
1
mark
还有x+y会溢出
结果会不会 int 溢出
mark
打卡
mark
为什么我的关注点在 是否溢出 如果 x y 的取值是最大值 那么 x+y 会溢出 从而得不到正确的结果
mark
mark
事实证明不会报错,但确实溢出了。
在函数有多个返回值时,只要有一个返回值有命名,其他的也必须命名。如果有多个返回值必须加上括号();如果只有一个返回值且命名也必须加上括号()。
需要全都命名 另外error如果一直时nil 可以取消这个返回值 精简函数
mark
mark
第二个返回值没有命名。
mark
func sum(x, y int)(int, error) 或者 func sum(x, y int)(total int, err error) 都可以
答案:第二个返回值没有命名。