GO lang异常处理

时间:2014-04-25 05:18:27

标签: go

我是新来的。如何在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");
        }
    }
}

1 个答案:

答案 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

游乐场: http://play.golang.org/p/VrhvtQDXCx