这段Java代码如何改写成对应的Go代码( 带OOP风格 )?

实际现象

  1. 有些在java里面的概念, 没法在Go中一一对应( 标序号的地方 )
  2. class是一种很好的组织代码的手段, 期望在Go中也能较好地组织代码

相关代码

  • java代码
package com.hezhiming.mavenlearn;
 
 
public class Person {
    private final String id;
    private String name;
    private int age;
    private String gender;
    
    // 1
    public static final CLASS_PUBLIC = "PUBLIC";
 
    public Person(final String id, final String name,
                  final int age, final String gender) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
 
    private String privateInstanceMethod() {
        return "private";
    }
    public String publicInstanceMethod() {
        return "public";
    }
 
    private static String privateStaticMethod() {
        return "private";
    }
    // 2
    public static String publicStaticMethod() {
        return "public";
    }
 
    /*                    getter/setter                       */
    public String getId() {
        return id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getGender() {
        return gender;
    }
 
    public void setGender(String gender) {
        this.gender = gender;
    }
}
  • 尝试的改写
type Person struct {
    id string
    name string
    age int
    gender string
}
// 类级别的public/private static final 变量
// 类级别的public static method
// 
func (self Person) GetId() int {
    return self.id
}
func (self *Person) SetName(value string) {
    self.name = value
}

func test() {
    p := Person{
        id: "id1",
        name: "name1",
        age: 23,
        gender: "f",
    }
    p.GetId()
}
阅读 3.6k
3 个回答

1.没有必要java的概念跟go的概念一一对应
2.别把java的臭毛病带到go来

没有必要非得一一对应的,只需要按照go的理念组织好自己的代码就可以了

type Person struct {
    Id string
    Name string
    Age int
    Gender string
}

func NewPerson(name string,age int) {
    return &Person{Name:name, Age:age }

}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题