我是新来的。如何在GO中实现子类型继承并处理其中的异常。我正在努力实现与下面的代码非常类似的东西。
import java.io.*;
import java.rmi.*;
class class1
{
public void m1() throws RemoteException
{
System.out.println("m1 in class1");
}
}
class class2 extends class1
{
public void m1() throws IOException
{
System.out.println("m1 in class2");
}
}
class ExceptionTest2
{
public static void main(String args[])
{
class1 obj = new class1();
try{
obj.m1();
}
catch(RemoteException e){
System.out.println("ioexception");
}
}
}
答案 0 :(得分:5)
正如人们已经指出的那样,Go与Java非常不同 这意味着你将不会拥有与Java代码“非常相似”的东西。
嵌入而不是继承
Go没有继承,因为您可能熟悉它。您可能找到的最近的地方称为embedding。
虽然嵌入式方法可能被父方法遮蔽并作为一种覆盖,但这不是解决Go中编程任务的常用方法。
错误而不是例外
恐慌不能用作例外。如果你想编写Go代码,你会返回错误,通知调用函数/方法出错了。
您的代码在Go中的样子:
package main
import (
"errors"
"fmt"
)
var (
RemoteError = errors.New("A remote error occured")
IOError = errors.New("An IO error occured")
)
type Struct1 struct{}
func (s *Struct1) m1() error {
fmt.Println("m1 in Struct1")
return nil // or RemoteError
}
type Struct2 struct {
Struct1
}
func (s *Struct2) m1() error {
fmt.Println("m1 in Struct2")
return nil // or IOError
}
func main() {
s1 := &Struct1{}
err := s1.m1()
if err != nil {
fmt.Println(err.Error())
}
}
<强>输出:强>
m1 in Struct1