正文
这篇指南为了能够帮助Java程序员快速深入了解Go语言特性!
主要区别
面向对象:
-
Go 语言的面向对象编程(OOP)非常简洁而优雅。说它简洁,简洁之处在于,它没有了OOP中很多概念,比如:继承、虚函数、构造函数和析构函数、隐藏的this指针等等。说它优雅,是它的面向对象(OOP)是语言类型系统(type system)中的天然的一部分。整个类型系统通过接口(interface)串联,浑然一体。
employee.go
-
package employee
-
-
import (
-
"fmt"
-
)
-
-
type employee struct {
-
firstName string
-
lastName string
-
totalLeaves int
-
leavesTaken int
-
}
-
-
func New(firstName string, lastName string, totalLeave int, leavesTaken int) employee {
-
e := employee {firstName, lastName, totalLeave, leavesTaken}
-
return e
-
}
-
-
func (e *employee) LeavesRemaining() {
-
fmt.Printf("%s %s has %d leaves remaining", e.firstName, e.lastName, (e.totalLeaves - e.leavesTaken))
-
}
main.go
-
package main
-
-
import "oop/employee"
-
-
func main() {
-
e := employee.New("Sam", "Adolf", 30, 20)
-
e.LeavesRemaining()
-
}
Go interface
-
package main
-
-
import "fmt"
-
import "math"
-
-
// Here's a basic interface for geometric shapes.
-
type geometry interface {
-
area() float64
-
perim() float64
-
}
-
-
// For our example we'll implement this interface on
-
// `rect` and `circle` types.
-
type rect struct {
-
width, height float64
-
}
-
type circle struct {
-
radius float64
-
}
-
-
// To implement an interface in Go, we just need to
-
// implement all the methods in the interface. Here we
-
// implement `geometry` on `rect`s.
-
func (r rect) area() float64 {
-
return r.width * r.height
-
}
-
func (r rect) perim() float64 {
-
return 2*r.width + 2*r.height
-
}
-
-
// The implementation for `circle`s.
-
func (c circle) area() float64 {
-
return math.Pi * c.radius * c.radius
-
}
-
func (c circle) perim() float64 {
-
return 2 * math.Pi * c.radius
-
}
-
-
// If a variable has an interface type, then we can call
-
// methods that are in the named interface. Here's a
-
// generic `measure` function taking advantage of this
-
// to work on any `geometry`.
-
func measure(g geometry) {
-
fmt.Println(g)
-
fmt.Println(g.area())
-
fmt.Println(g.perim())
-
}
-
-
func main() {
-
r := rect{width: 3, height: 4}
-
c := circle{radius: 5}
-
-
// The `circle` and `rect` struct types both
-
// implement the `geometry` interface so we can use
-
// instances of
-
// these structs as arguments to `measure`.
-
measure(r)
-
measure(c)
-
}
方法: