Data Types:
- String --> string (defaults to "")
- Integer --> int (defaults to 0)
- Double --> float (defaults to 0.0)
- Boolean --> bool (defaults to false)
final equivalent
const x string = "text"
Define
String x --> var x string
Initialize
x = "text" --> x = "text"
Define & Initialize
String x = "text" --> x := "text"
Collection
List list = new ArrayList<>(); --> var list []string
--> list := []string{"text"}
--> list = append(list, "another text")
Map map = new HashMap<>():
var x map[string]int where string is key and int is value.
x["key1"] = 10
Control Statements
if/for/switch
if (condition) {} --> if (condition) {}
e.g.
if (10 >= 10) {} --> if (10 >= 10) {}
for(initialization;condition;incr/decr) {} --> for (initialization;condition;incr/decr) {}
for (int x = 0; x < 10; x++) {} --> for (x := 0; x < 10; x++) {}
switch(condition) {
case A:
//
break;
case B:
//
break;
default:
}
Go equivalent
switch condition {
case A:
//
case B:
//
default:
}
Functions
public static Integer add(int x, int y) {
return x + y;
}
Go equivalent
func Add(x int, y int) int { // capital function name means public/package-visible
return x + y;
}
Functions can also return multiple values
func AddSub(x, y int) (int, int) {
return x+y, x-y
}
Go supports closures as well.
Kind of an anonymous function and can be assigned to a variable, e.g.
func main() {
add := function (x, y int) int { return x+y }
add(1,1)
}
Structs & Methods
Go doesn't support classes, nor inheritance. Use structs and methods to encapsulate data and operations e.g.
type user struct { name string, age int }
structs can also contain embedded types e.g.
type account struct {employee user, id int }
Initialize Struct
x := new(user)
x := &user{}
x := &user{}
Composition
type Account struct {
*User // this structs will act like primary member.
id int
}
Go supports method that which are visible on on struct types e.g.
func (a account) printName() {
// prints name
}
// not (u user) means this method is part of the struct
// and can be called on the struct type e.g.
func main() {
p := account{
employe = {name := "xyz", age = 20},
id = 100000
}
p.printName() // note sends copy of p not a reference to p. To send a reference you'll to change printName function's signature to func (a *account) printName() {}
packages
Go packages are always a single value. e.g.
package db
package app
But imports needs to full path e.g.
package app/db
Interfaces
type Logger interface {
Log(message string)
}
Implementing an interface in Go requires just creating method with same signature e.g.
type ConsoleLogger struct {}
func (l *ConsoleLogger) Log(message string) {}
Go doesn't have any exception handling, but built-in type can be used.
type error interface {
Error() string
} // built-in error interface
import (
"errors"
)
func process(count int) error {
if count < 1 {
return errors.New("Invalid count")
}
Finally equivalent in go is defer e.g.
defer file.close()
Comments