MST

星途 面试题库

面试题:Go语言中不同类型变量赋值的基本规则

在Go语言中,简述基本类型(如整数、字符串、布尔)之间的赋值规则。如果有两个自定义类型A和B,它们的底层类型都是int,能否直接相互赋值?如果不能,怎样实现赋值?
14.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. Go语言基本类型赋值规则
    • 整数类型
      • 不同大小的整数类型(如int8int16int32int64uint8等)之间赋值时,如果目标类型能容纳源类型的值,则可以直接赋值。例如,int8类型的值在 -128 到 127 之间时,可以直接赋值给int16类型变量。但如果源值超出目标类型范围,会导致编译错误。例如,不能将一个大于 127 的int16值直接赋给int8类型变量。
      • intuint类型的大小取决于运行环境(32 位或 64 位),与特定大小的整数类型赋值规则类似,只要值在目标类型范围内即可直接赋值。
    • 字符串类型
      • 字符串类型赋值只能在相同类型之间进行。一个字符串变量可以直接赋值给另一个字符串变量。例如:
var s1 string = "hello"
var s2 string
s2 = s1
  • 布尔类型
    • 布尔类型只有truefalse两个值,布尔类型变量只能赋值为这两个值之一,且只能在布尔类型变量之间相互赋值。例如:
var b1 bool = true
var b2 bool
b2 = b1
  1. 自定义类型A和B底层类型都是int的赋值问题
    • 能否直接相互赋值:不能直接相互赋值。虽然A和B底层类型都是int,但它们是不同的自定义类型,Go语言中不同类型之间不能直接赋值。
    • 怎样实现赋值:可以通过类型转换来实现赋值。例如:
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