// ʕ ◔ϖ◔ʔ Go~
// Pros: It can use in global
// Cons: var
var x float64 = 10
// Pros: short, no var
// Cons: can't use in global
y := float64(10)
// ʕ ◔ϖ◔ʔ Go~
// *Type
// It needs length. Can't omit.
// Pros: it can have initial length
// Cons: long
slice := make([]*Type, 0)
// Pros: it can have initial values and length, short
// Cons: {}
slice := []*Type{}
slice := []int{1, 2, 3}
array := [10]int{1, 2, 3} // it is not slice, array
array := [...]int{1, 2, 3} // omit length
// Pros: It can use in global space
// Cons: var
var slice []*Type
var array [10]*Type // It is not slice, array
// ʕ ◔ϖ◔ʔ Go~
slice = append(slice, 1)
slice = append(slice, 1, 2, 3)
slice = append(slice, other...)
// ʕ ◔ϖ◔ʔ Go~
// index
for i := range slice {
fmt.Println(i)
}
// value
for _, v := range slice {
fmt.Println(v)
}
// both
for i, v := range slice {
fmt.Println(i, v)
}
# Python
# index
for i in range(len(array)):
print(i)
# value
for v in array:
print(v)
# both
for i, v in enumerate(array):
print(i, v)
// ʕ ◔ϖ◔ʔ Go~
// Option 1: instance & :=, it needs {}
anonymous := Person{}
// Option 2: instance & var
var anonymous Person
// Option 3: pointer & :=, it needs {}
anonymous := &Person{}
// Option 4: pointer & :=
anonymous := new(Person)
// Option 5: pointer & var
var anonymous *Person = &Person{}
// Option 5: pointer & var & new
var anonymous *Person = new(Person)
// Wrong! it is just pointer! instance is not created!
var anonymous *Person
// ʕ ◔ϖ◔ʔ Go~
// Option 1: initialize with composite literal
// Pros: Easy and simple
// Cons: It will be error if type has extra field, initializing map everyplace is boring
tongpoo := Person{"ymotongpoo", 30}
var tongpoo Person = Person{"ymotongpoo", 30}
tongpoo := Person{"ymotongpoo", 30}
var tongpoo *Person = &Person{"ymotongpoo", 30}
// Option 2: field name
// Pros: Easy and simple, It wont't be error evenif the type has extra field
// Cons: Initializing map everyplace is boring
tongpoo := Person{name:"ymotongpoo", age:30}
var tongpoo Person = Person{name:"ymotongpoo", age:30}
tongpoo := Person{name:"ymotongpoo", age:30}
var tongpoo *Person = &Person{name:"ymotongpoo", age:30}
// Option 3: initializer function
// Pros: It can have complex initialization code
// Cons: long
func NewPerson(name string, age int) *Person {
obj := new (Person)
obj.name = name
obj.age = age
return obj
}
obj := NewPerson("ymotongpoo", 30)