MST

星途 面试题库

面试题:Go中类型方法在零值接收器下的边界情况处理

在Go语言中,假设你有一个结构体类型 `User`,并为其定义了一些方法。当使用 `User` 类型的零值(例如 `var u User`)作为接收器调用这些方法时,可能会遇到哪些边界情况?如何在代码中妥善处理这些情况以避免运行时错误?请举例说明。
33.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 可能遇到的边界情况
    • 方法中访问结构体的指针类型字段时,零值的指针字段为 nil,可能导致空指针引用错误。例如,如果 User 结构体中有一个指针类型的字段 *Address,在方法中访问 u.Address.City 时,如果 u.Addressnil,就会引发运行时错误。
  2. 处理方式
    • 在方法中对可能为空的指针字段进行检查。例如:
package main

import "fmt"

type Address struct {
    City string
}

type User struct {
    Name    string
    Address *Address
}

func (u User) PrintCity() {
    if u.Address!= nil {
        fmt.Println(u.Address.City)
    } else {
        fmt.Println("No address set")
    }
}

在上述代码中,User 结构体有一个 *Address 指针类型字段。PrintCity 方法在访问 Address.City 前先检查 u.Address 是否为 nil,这样就避免了运行时错误。在使用零值调用 PrintCity 方法时,会输出 No address set

func main() {
    var u User
    u.PrintCity()
}