func variablesAndConstants() {
var variable string = "hello" // 1
compact := "hello" // 2
fmt.Println(variable, compact)
const constant string = "hello" // 3
fmt.Println(constant)
}
변수는 1처럼 표현하는게 기본형인데, func 안에서는 2번처럼 축약해서 쓸 수 있다.
1번의 경우 var: 변수, variable: 변수이름, string: 변수 타입 인데, 타입은 안써줘도 뒤에 들어오는 값 보고 추정해줌
상수는 3처럼 표현하면됨.
3번의 경우 const: 상수, constant: 상수이름, string: 변수 타입
func lenAndUpper(name string) (int, string) {
return len(name), strings.ToUpper(name)
}
func multiply(a, b int) int {
return a * b
}
func: 함수라는 뜻
lenAndUpper: 함수이름
(name string): 파리미터. string타입의 name
(int, string): 반환 타입. int, string 두개 반환
func superAdd(numbers ...int) int {
total := 0
for _, number := range numbers {
total += number
}
return total
}
func superAdd(numbers ...int) int {
total := 0
for i := 0; i < len(numbers); i++ {
total += numbers[i]
}
return total
}
이렇게도 쓸 수 있음
func ifIDrink(age int) bool {
if age < 18 {
return false
}
return true
}
func ifIDrink1(age int) bool {
// variable expression
if koreanAge := age + 2; koreanAge < 18 {
return false
}
return true
}
기본형 if문은 별다를게 없는데, variable expression은 특이한 느낌으로 기억하면 됨
func whenIDrink(age int) bool {
switch {
case age < 18:
return false
}
return true
}
func whenIDrink1(age int) bool {
// variable expression
switch koreanAge := age + 2; koreanAge {
case 18:
return false
}
return true
}
when도 if랑 별다를건 없고 variable expression 쓸 수 있음
a := 10
b := a
a = 20
이렇게 하면 a=20, b=10임.(복사)
a := 10
b := &a
fmt.Println(a, b, *b)
이렇게 하면 b는 a의 주소값을 가지게 된다.
출력값: 10 0x1400000e0c8 10
C랑 비슷함. &는 주소, *는 주소 안의 값
a := 10
b := &a
fmt.Println(a, b, *b)
*b = 20
fmt.Println(a, b, *b)
이렇게 하면 a도 20으로 바뀜. 주소에 직접 접근하기 때문.
func arraysAndSlices() {
names := [5]string{"Tom", "John", "Freddy"}
names[3] = "Anne"
names[4] = "Marry"
names[5] = "Error" // out of index error
slices := []string{"Tom", "John", "Freddy"}
slices = append(slices, "Anne")
slices = append(slices, "Marry")
slices = append(slices, "Harry") // 계속 추가 가능
}
func maps() {
person := map[string]string{"name": "Tom", "age": "20"}
fmt.Println(person)
// for loop도 가능!
for key, value := range person {
fmt.Println(key, value)
}
}
출력:
map[age:20 name:Tom]
age 20
name Tom
다른 언어랑 다르게 class, object가 없음
type person struct {
name string
age int
favFood []string
}
func main() {
john := person{
name:"John Doe",
age:27,
favFood:[]string{"ramen", "kimchi"},
}
fmt.Println(john)
// 용법
john.name
john.age
john.favFood
}
출력:
{John Doe 27 [ramen kimchi]}