MST

星途 面试题库

面试题:Go语言中结构体与面向对象编程基础

在Go语言中定义一个包含姓名(string类型)、年龄(int类型)和地址(string类型)的结构体`Person`。然后编写一个函数,接收`Person`结构体指针作为参数,实现对该结构体实例的年龄增加1的操作,并打印出更新后的`Person`信息。请说明Go语言结构体方法与传统面向对象语言中类方法的主要区别。
22.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import "fmt"

// 定义Person结构体
type Person struct {
    Name    string
    Age     int
    Address string
}

// 定义函数,接收Person结构体指针,增加年龄并打印信息
func updateAge(p *Person) {
    p.Age++
    fmt.Printf("更新后的Person信息: Name: %s, Age: %d, Address: %s\n", p.Name, p.Age, p.Address)
}

Go语言结构体方法与传统面向对象语言中类方法的主要区别:

  • 定义方式
    • Go语言:结构体方法通过在函数定义前加上接收者(receiver)来实现,接收者可以是结构体指针或结构体值。例如func (p *Person) method() { }
    • 传统面向对象语言(如Java、C++):方法在类的定义内部进行定义,是类的一部分。例如在Java中public class Person { public void method() { } }
  • 继承机制
    • Go语言:没有传统意义上的继承,通过组合(composition)来实现代码复用。例如一个结构体可以嵌套另一个结构体来获得其功能。
    • 传统面向对象语言:通常有明确的继承机制,子类可以继承父类的属性和方法,通过extends(Java)或:(C++)关键字实现。
  • 多态实现
    • Go语言:通过接口(interface)实现多态,只要类型实现了接口的所有方法,就可以被赋值给该接口类型。
    • 传统面向对象语言:通过继承和虚函数(Java的重写、C++的虚函数和多态)实现多态,子类重写父类的虚函数,通过父类指针或引用调用时表现出多态性。