If with a Twist

go언어도 if-else 사용이 가능하다. 주의할 점은 괄호가 반드시 있어야 컴파일이 된다.

package main

import (
	"fmt"
)

func canIDrink(age int) bool {
	if koreanAge := age + 2; koreanAge < 18 {       //if문 내에서 변수 선언이 가능
		return false
	}
	return true
}

func main() {
	fmt.Println(canIDrink(16))
}

Switch

go언어도 switch 사용이 가능하다.

package main

import (
	"fmt"
)

func canIDrink(age int) bool {
	switch koreanAge := age + 2; koreanAge {        //switch문 내에서 변수 선언 가능
	case 10:
		return false
	case 18:
		return true
	}
	return false
}

func main() {
	fmt.Println(canIDrink(16))
}

아래 방식으로도 switch를 사용할 수 있다.

package main

import (
	"fmt"
)

func canIDrink(age int) bool {
	switch {
	case age < 18:
		return false
	case age == 18:
		return true
	case age > 50:
		return false
	}
	return false
}

func main() {
	fmt.Println(canIDrink(16))
}

Pointers!

포인터를 사용하는 방식은 C++과 유사하지만 조금 다르다. Low-level Programming이 가능하다.

package main

import "fmt"

func main() {
	a := 2
	b := &a         //b에 a의 주소를 저장
	*b = 20         //b에 저장된 주소에 해당하는 메모리, 즉 a에 20 저장
	fmt.Println(a)  //20을 출력
}

Arrays and Slices

배열을 선언하는 방법은 다른 언어와 같다.

package main

import "fmt"

func main() {
	names := [5]string{"nico", "lynn", "dal"}
	names[3] = "alala"
	names[4] = "alala"
	names[5] = "alala"      //이부분에서 범위 밖을 참조하여 오류가 남
	fmt.Println(names)
}

go언어에는 C#의 Arraylist와 유사한 Slice가 있다. Slice는 배열의 크기를 선언하지 않고 Arraylist처럼 유동적으로 값을 추가하고 뺄 수 있다.
추가를 할때는 append를 사용하며 값을 추가한 새로운 Slice를 리턴한다. 자주 사용되는 기능이다.

package main

import "fmt"

func main() {
	names := []string("nico", "lynn", "dal")
	names = append(names, "flynn")      //값을 추가한 새로운 Slice를 리턴함
	fmt.Println(names)
}

Maps

go언어도 map 사용이 가능하다. data := map[key]value{"key": value}

package main

import "fmt"

func main() {
	nico := map[string]string{"name": "nico", "age": "12"}      //"key" : value
	for key, _ := range nico {
		fmt.Println(key)
	}
}

Structs

class와 object를 합친 듯한 struct를 go언어에서도 사용이 가능하다. struct는 python의 __init__과 같은 생성자가 없다.

package main

import "fmt"

type person struct {            //struct 선언
	name    string
	age     int
	favFood []string
}

func main() {
	favFood := []string{"kimchi", "ramen"}
	nico := person{name: "nico", age: 18, favFood: favFood}       //선언 시 var: value로 해주는게 좋음
	fmt.Println(nico.name)
}