MST

星途 面试题库

面试题:Go语言中闭包如何在简单数据封装场景下使用

假设你有一个结构体 `User` 包含 `Name` 和 `Age` 字段,要求使用闭包实现对 `User` 实例数据的封装,使得外部只能通过特定函数访问和修改 `Age` 字段,写出具体的代码实现。
13.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

以下以 Go 语言为例实现:

package main

import "fmt"

// User结构体
type User struct {
    Name string
    Age  int
}

// 创建一个闭包函数,用于封装User实例数据
func NewUser(name string, age int) func(string, int) (int, bool) {
    u := User{Name: name, Age: age}
    return func(action string, value int) (int, bool) {
        if action == "get" {
            return u.Age, true
        } else if action == "set" {
            if value > 0 {
                u.Age = value
                return u.Age, true
            }
            return 0, false
        }
        return 0, false
    }
}

你可以使用如下方式调用:

func main() {
    // 创建一个User实例
    user := NewUser("Alice", 25)

    // 获取Age
    age, ok := user("get", 0)
    if ok {
        fmt.Printf("Age: %d\n", age)
    }

    // 设置Age
    newAge, ok := user("set", 26)
    if ok {
        fmt.Printf("New Age: %d\n", newAge)
    }
}

如果是 Python 语言实现如下:

class User:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def get_age(self):
        return self.__age

    def set_age(self, age):
        if age > 0:
            self.__age = age
            return self.__age
        return None


# 创建User实例
user = User("Alice", 25)
# 获取Age
print("Age:", user.get_age())
# 设置Age
new_age = user.set_age(26)
if new_age is not None:
    print("New Age:", new_age)