Golang bukan merupakan bahasa pemrograman yang berorientasi objek. Tapi golang memiliki fitur seperti type, struct, method, reference dan interface yang memungkinkan untuk melakukan pemrograman yang mirip dengan OOP.
package main
type MyStr string
func (m MyStr) Salam() {
m = "Selamat Pagi"
println(m)
}
func main() {
var str MyStr
str.Salam()
}
package main
// ini error karena string bukan type local dalam paket main
func (m string) Salam() {
m = "Selamat Pagi"
println(m)
}
func main() {
var str string
str.Salam()
}
package main
type i interface {
method()
}
type myStr string
func (m *myStr) method() {
println(*m)
}
func main() {
var i i
str := myStr("Hello")
i = &str
i.method()
}
package main
type i interface {
method()
}
func main() {
var i i
i.method()
}
package main
type i interface{
method()
}
type myStr string
func (m *myStr) method() {
println(*m)
}
func main() {
var i i
str := myStr("Hello")
i = &str
i.method()
describe(i)
}
func describe(i I) {
fmt.Printf("(%v, %T)\n", i, i)
}
var a interface{}
a = "string"
println(a.(string))
a = false
println(a.(bool))
if value, ok := a.(bool); ok {
println(value)
}
myMap := map[string]interface{}{"Satu": true, "Dua": "string", "Tiga": uint(3)}
println(myMap["Satu"].(bool))
println(myMap["Dua"].(string))
println(myMap["Tiga"].(uint))
package main
type myStr string
func main() {
var a interface{}
a = myStr("Jacky")
switch t := a.(type) {
case string :
println("type string", t)
case bool :
println("type bool", t)
case myStr :
println("type myStr", t)
default :
println("type lainnya", t)
}
}
package main
import (
"fmt"
)
type becak struct {
roda int
warna string
}
type gerobak struct {
roda int
warna string
}
func (o *becak) caraJalan() string {
return "dikayuh"
}
func (o *gerobak) caraJalan() string {
return "didorong"
}
func main() {
becak := new(becak)
println("becak", "cara jalan:", becak.caraJalan())
gerobak := new(gerobak)
println("gerobak", "cara jalan:", gerobak.caraJalan())
}
// file APP/latihan/kendaraan.go
package latihan
// Kendaraan interface
type Kendaraan interface {
CaraJalan() string
SetWarna(string)
GetWarna() string
GetRoda() int
}
type becak struct {
roda int
warna string
}
func (o *becak) SetWarna(s string) {
o.warna = s
}
func (o *becak) GetWarna() string {
return o.warna
}
func (o *becak) GetRoda() int {
return 3
}
func (o *becak) CaraJalan() string {
return "dikayuh"
}
// NewBecak function untuk membuat objek becak
func NewBecak() Kendaraan {
return &becak{}
}