面试题答案
一键面试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语言:结构体方法通过在函数定义前加上接收者(receiver)来实现,接收者可以是结构体指针或结构体值。例如
- 继承机制:
- Go语言:没有传统意义上的继承,通过组合(composition)来实现代码复用。例如一个结构体可以嵌套另一个结构体来获得其功能。
- 传统面向对象语言:通常有明确的继承机制,子类可以继承父类的属性和方法,通过
extends
(Java)或:
(C++)关键字实现。
- 多态实现:
- Go语言:通过接口(interface)实现多态,只要类型实现了接口的所有方法,就可以被赋值给该接口类型。
- 传统面向对象语言:通过继承和虚函数(Java的重写、C++的虚函数和多态)实现多态,子类重写父类的虚函数,通过父类指针或引用调用时表现出多态性。