MST

星途 面试题库

面试题:Go中如何为struct定义方法并实现链式调用

假设有一个结构体 `User` 包含 `Name` 和 `Age` 字段,要求定义一系列方法用于设置 `Name` 和 `Age`,并且这些方法能够支持链式调用,比如 `user := User{}.SetName("John").SetAge(30)`,请写出具体实现代码。
48.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

type User struct {
    Name string
    Age  int
}

func (u *User) SetName(name string) *User {
    u.Name = name
    return u
}

func (u *User) SetAge(age int) *User {
    u.Age = age
    return u
}

在Go语言中使用上述代码定义结构体User及其方法。若要测试链式调用,可在main函数中添加如下代码:

func main() {
    user := User{}.SetName("John").SetAge(30)
    fmt.Printf("Name: %s, Age: %d\n", user.Name, user.Age)
}

上述代码先定义了结构体User,然后为其定义了SetNameSetAge方法,每个方法都返回*User类型的指针,这样就可以支持链式调用。在main函数中演示了如何进行链式调用并输出结果。

如果是Python语言实现如下:

class User:
    def __init__(self):
        self.Name = None
        self.Age = None

    def SetName(self, name):
        self.Name = name
        return self

    def SetAge(self, age):
        self.Age = age
        return self

测试链式调用可添加如下代码:

if __name__ == "__main__":
    user = User().SetName("John").SetAge(30)
    print(f"Name: {user.Name}, Age: {user.Age}")

在Python中通过类User定义属性和方法,每个方法返回self以支持链式调用,在if __name__ == "__main__"代码块中进行测试。

如果是Java语言实现如下:

class User {
    private String Name;
    private int Age;

    public User setName(String name) {
        Name = name;
        return this;
    }

    public User setAge(int age) {
        Age = age;
        return this;
    }

    @Override
    public String toString() {
        return "User{" +
                "Name='" + Name + '\'' +
                ", Age=" + Age +
                '}';
    }
}

测试链式调用在main方法中添加如下代码:

public class Main {
    public static void main(String[] args) {
        User user = new User().setName("John").setAge(30);
        System.out.println(user);
    }
}

在Java中定义类User及其setNamesetAge方法,每个方法返回this实现链式调用,并重写toString方法便于输出结果,在main方法中测试链式调用。