面试题答案
一键面试- Go语言基本类型赋值规则:
- 整数类型:
- 不同大小的整数类型(如
int8
、int16
、int32
、int64
、uint8
等)之间赋值时,如果目标类型能容纳源类型的值,则可以直接赋值。例如,int8
类型的值在 -128 到 127 之间时,可以直接赋值给int16
类型变量。但如果源值超出目标类型范围,会导致编译错误。例如,不能将一个大于 127 的int16
值直接赋给int8
类型变量。 int
和uint
类型的大小取决于运行环境(32 位或 64 位),与特定大小的整数类型赋值规则类似,只要值在目标类型范围内即可直接赋值。
- 不同大小的整数类型(如
- 字符串类型:
- 字符串类型赋值只能在相同类型之间进行。一个字符串变量可以直接赋值给另一个字符串变量。例如:
- 整数类型:
var s1 string = "hello"
var s2 string
s2 = s1
- 布尔类型:
- 布尔类型只有
true
和false
两个值,布尔类型变量只能赋值为这两个值之一,且只能在布尔类型变量之间相互赋值。例如:
- 布尔类型只有
var b1 bool = true
var b2 bool
b2 = b1
- 自定义类型A和B底层类型都是int的赋值问题:
- 能否直接相互赋值:不能直接相互赋值。虽然A和B底层类型都是
int
,但它们是不同的自定义类型,Go语言中不同类型之间不能直接赋值。 - 怎样实现赋值:可以通过类型转换来实现赋值。例如:
- 能否直接相互赋值:不能直接相互赋值。虽然A和B底层类型都是
package main
import "fmt"
type A int
type B int
func main() {
var a A = 10
var b B
b = B(a) // 通过类型转换将A类型的值赋给B类型变量
fmt.Println(b)
}
在上述代码中,使用B(a)
将A
类型的变量a
转换为B
类型,然后赋值给b
。