Thanks for the comments about generating code to handle exceptions. . Here 
it is a new version.
package main

import (
    "fmt"
    "os"
)

type CatchException struct{}

func main() {

    var args []string = os.Args

    var ce CatchException = CatchException{}
    ce.CatchException_main(args)
}

/** generated method **/
func (catchException *CatchException) CatchException_main(args []string) {
    defer func() {
        if err := recover(); err != nil {
            exc := err.(Exception)
            switch exc.msg {
            case "Exception":
                fmt.Println("yes, I caught it")
            default:
                fmt.Println("No, something is not right")
            }
        }
        fmt.Println("finally processing")
    }()

    (&ThrowException{}).runme()
}

type ThrowException struct{}

func (throwException *ThrowException) runme() {
    panic(Exception{"Exception"})
}

type Exception struct {
    msg string
}

понедельник, 4 апреля 2022 г. в 14:12:37 UTC+3, alex-coder: 

>
>
>
>
> *Another use case for automatically translating codewritten in Java to 
> Golang is Exception Handling.The next example is likely to be about 
> multithreading.Example in Java:*
> package com.builder.start.here;
>
> public class CatchException {
>
>     public static void main(String[] args) {
>         try {
>             new ThrowException().runme();
>         } catch (Exception e) {
>             System.out.println("yes, I caught it");
>         } finally {
>             System.out.println("finally processing");
>         }
>
>     }
>
> }
>
> class ThrowException{
>     public void runme() throws Exception{
>         throw new Exception();
>     }
> }
>
> *Converter gave out:*
>
> package main
>
> import (
>     "fmt"
>     "os"
> )
>
> type CatchException struct{}
>
>
> func main() {
>
>     var args []string = os.Args
>
>     var ce CatchException = CatchException{}
>     ce.CatchException_main(args)
> }
>
> /** generated method **/
> func (catchException *CatchException) CatchException_main(args []string) {
>     defer func() {
>         if err := recover(); err != nil {
>             str := err.(string)
>             switch str {
>             case "Exception":
>                 fmt.Println("yes, I caught it")
>             default:
>                 fmt.Println("No, something is not right")
>             }
>         }
>         fmt.Println("finally processing")
>     }()
>
>     (&ThrowException{}).runme()
> }
>
> type ThrowException struct{}
>
> func (throwException *ThrowException) runme() {
>     panic("Exception")
> }
> воскресенье, 27 марта 2022 г. в 15:11:48 UTC+3, alex-coder: 
>
>> After several months of switching from Java to Golang, it seemed to me 
>> that
>> it would be interesting to make the translation of Java code into Golang 
>> automatically.
>> The text below shows what has been done so far.
>>
>> The work is not a prototype, but rather indicates the possibility of 
>> achieving a result.
>> Therefore, I deliberately simplify the development context of the 
>> Converter where it was 
>> possible. 
>>
>> At first it seemed important to me that between Java and Go there is a 
>> difference 
>> between the implementation of the Dynamic Dispatching, more precisely, 
>> there is no 
>> Dynamic Dispatching in Go. The applied solution in the current 
>> implementation 
>> looks not only ugly but even violates the several very important rules of 
>> the OO design, 
>> I'm not kidding here. But this option looks like that it will be working. 
>>
>> Onward I will provide the 4 code samples in Java, followed by the 
>> automatically 
>> generated Golang code and comments as needed. 
>>
>> *1. Of course, I started with the most popular program: "Hello World".*
>>
>> package main;
>>
>> public class HelloWorld {
>>   public static void main(  String[] args){
>>     System.out.println("Hello World");
>>   }
>> }
>>
>> *Converter gave out:*
>>
>> package main
>>
>> import (
>>         "fmt"
>>         "os"
>> )
>>
>> type HelloWorld struct{}
>>
>> func main() {
>>
>>         var args []string = os.Args
>>
>>         var hw HelloWorld = HelloWorld{}
>>         hw.HelloWorld_main(args)
>> }
>>
>> /** generated method **/
>> func (helloWorld *HelloWorld) HelloWorld_main(args []string) {
>>         fmt.Println("Hello World")
>> }
>>
>> *2. Next, it was interesting to deal with the problem of a simple 
>> inheritance.*
>>
>> package main;
>>
>> public class TestInheritance {
>>   public static void main(  String[] args){
>>     Inheritance inh=null;
>>     inh=new Second();
>>     inh.hello();
>>     inh=new Third();
>>     inh.hello();
>>   }
>> }
>> public interface Inheritance {
>>   public void hello();
>> }
>> class Second implements Inheritance {
>>   public void hello(){
>>     System.out.println("Second");
>>   }
>> }
>> class Third implements Inheritance {
>>   public void hello(){
>>     System.out.println("Third");
>>   }
>> }
>>  
>> *Converter gave out:*
>>
>> package main
>>
>> import (
>>         "fmt"
>>         "os"
>> )
>>
>> type TestInheritance struct{}
>>
>> func main() {
>>
>>         var args []string = os.Args
>>
>>         var ti TestInheritance = TestInheritance{}
>>         ti.TestInheritance_main(args)
>> }
>>
>> /** generated method **/
>> func (testInheritance *TestInheritance) TestInheritance_main(args 
>> []string) {
>>
>>         var inh Inheritance
>>         inh = AddressSecond(Second{})
>>         inh.hello()
>>         inh = AddressThird(Third{})
>>         inh.hello()
>> }
>>
>> type Inheritance interface {
>>         hello()
>> }
>> type Second struct{}
>>
>> func (second *Second) hello() {
>>         fmt.Println("Second")
>> }
>>
>> type Third struct{}
>>
>> func (third *Third) hello() {
>>         fmt.Println("Third")
>> }
>>
>> func AddressSecond(s Second) *Second { return &s }
>> func AddressThird(t Third) *Third    { return &t }
>>
>>
>> *3. In the following example, it is necessary to correctly define    a 
>> common interface for the inheritance tree.*
>>
>> package no.packeges;
>>
>> public class TestExtension {
>>   public static void main(  String[] args){
>>     TestExtension te=new TestExtension();
>>     te.hello();
>>     te=new Second();
>>     te.hello();
>>     te=new Third();
>>     te.hello();
>>     te=new Fourth();
>>     te.hello();
>>   }
>>   public void hello(){
>>     System.out.println("hello");
>>   }
>> }
>> class Second extends TestExtension {
>>   public void hello(){
>>     System.out.println("Second");
>>   }
>> }
>> class Third extends TestExtension {
>>   public void hello(){
>>     System.out.println("Third");
>>   }
>> }
>> class Fourth extends Third {
>>   public void hello(){
>>     System.out.println("Fourth");
>>   }
>> }
>>
>> *Converter gave out:*
>>
>> package main
>>
>> import (
>>         "fmt"
>>         "os"
>> )
>>
>> type TestExtension struct{}
>>
>> func main() {
>>
>>         var args []string = os.Args
>>
>>         var te TestExtension = TestExtension{}
>>         te.TestExtension_main(args)
>> }
>> func (testExtension *TestExtension) hello() {
>>         fmt.Println("hello")
>> }
>>
>> /** generated method **/
>> func (testExtension *TestExtension) TestExtension_main(args []string) {
>>
>>         var te ITestExtension = AddressTestExtension(TestExtension{})
>>         te.hello()
>>         te = AddressSecond(Second{})
>>         te.hello()
>>         te = AddressThird(Third{})
>>         te.hello()
>>         te = AddressFourth(Fourth{})
>>         te.hello()
>> }
>>
>> type Second struct {
>>         TestExtension
>> }
>>
>> func (second *Second) hello() {
>>         fmt.Println("Second")
>> }
>>
>> type Third struct {
>>         TestExtension
>> }
>>
>> func (third *Third) hello() {
>>         fmt.Println("Third")
>> }
>>
>> type Fourth struct {
>>         Third
>> }
>>
>> func (fourth *Fourth) hello() {
>>         fmt.Println("Fourth")
>> }
>>
>> type ITestExtension interface { 
>> /** Generated Method */
>>         hello()
>> }
>>
>> func AddressSecond(s Second) *Second                      { return &s }
>> func AddressThird(t Third) *Third                         { return &t }
>> func AddressTestExtension(t TestExtension) *TestExtension { return &t }
>> func AddressFourth(f Fourth) *Fourth                      { return &f }
>>
>>
>>
>>
>>
>> *4. Now the Dynamic Dispatching absence. The problematic method in    the 
>> last sample is the amount() in class Repeater.    Without rewriting the 
>> code, I think it would be impossible to    invoke it correctly.*
>>
>> package main;
>>
>> public class Speaker {
>>   String message;
>>   public static void main(  String[] args){
>>     Speaker sp = new Speaker("Say hello !");
>>     System.out.println(sp.amount());
>>     sp.speak();
>>     Repeater rp = new Repeater("Say hello !",3);
>>     System.out.println(rp.amount());
>>     rp.speak();
>>   }
>>   public Speaker(  String message){
>>     this.message=message;
>>   }
>>   public void speak(){
>>     for (int i=0; i < amount(); i++) {
>>       System.out.println(this.message);
>>     }
>>   }
>>   public int amount(){
>>     return 1;
>>   }
>> }
>> class Repeater extends Speaker {
>>   int to_repeat=0;
>>   public Repeater(  String message,  int amount){
>>     super(message);
>>     this.to_repeat=amount;
>>   }
>>   public int amount(){
>>     return this.to_repeat;
>>   }
>> }
>>
>> *Converter gave out:*
>>
>> package main
>>
>> import (
>>         "fmt"
>>         "os"
>> )
>>
>> type Speaker struct {
>>         message string
>> }
>>
>> func main() {
>>
>>         var args []string = os.Args
>>
>>         var s_dummy Speaker = NewSpeaker("")
>>         s_dummy.Speaker_main(args)
>> }
>> func NewSpeaker(message string) Speaker {
>>
>>         var speaker Speaker = Speaker{message}
>>         return speaker
>> }
>> func (speaker *Speaker) speak() {
>>         for i := 0; i < speaker.amount(); i++ {
>>                 fmt.Println(speaker.message)
>>         }
>> }
>> func (speaker *Speaker) amount() int {
>>         return 1
>> }
>>
>> /** generated method **/
>> func (speaker *Speaker) Speaker_main(args []string) {
>>
>>         var sp ISpeaker = AddressSpeaker(NewSpeaker("Say hello !"))
>>         fmt.Println(sp.amount())
>>         sp.speak()
>>
>>         var rp ISpeaker = AddressRepeater(NewRepeater("Say hello !", 3))
>>         fmt.Println(rp.amount())
>>         rp.speak()
>> }
>>
>> type Repeater struct {
>>         Speaker
>>
>>         to_repeat int
>> }
>>
>> func NewRepeater(message string, amount int) Repeater {
>>
>>         var repeater Repeater = Repeater{NewSpeaker(message), amount}
>>         return repeater
>> }
>> func (repeater *Repeater) amount() int {
>>         return repeater.to_repeat
>> }
>> func (repeater *Repeater) speak() {
>>         for i := 0; i < repeater.amount(); i++ {
>>                 fmt.Println(repeater.message)
>>         }
>> }
>>
>> type ISpeaker interface { 
>>
>> /** Generated Method */
>>
>>         amount() int
>> /** Generated Method */
>>
>>         speak()
>> }
>>
>> func AddressRepeater(r Repeater) *Repeater { return &r }
>> func AddressSpeaker(s Speaker) *Speaker    { return &s }
>>
>>
>>
>>
>> *5. I will be thankful for any feedback. Thanks to everyone.*
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/83807c05-7173-42d9-bf39-67f7d6cf3852n%40googlegroups.com.

Reply via email to