package main

import (
	"fmt"
	"strings"
)

var name1 string = "outside func"

/*Go 에서는 전역변수는 축약형이 사용 불가능하고, func 안에서는 축약형(:=)이 사용 가능하다.
*축약형 사용 시 자동으로 변수 타입을 정해주며, 변경이 불가능하다.
 */
func main() {
	name2 := "inside func"
	fmt.Println("variable test1 outside " + name1)
	fmt.Println("variable test2 inside " + name2)

	fmt.Println(multiply(2, 2))

	totalLength, upperName := lenAndUpper("five words")
	fmt.Println(totalLength, upperName)

	repeatMe("nico", "hyun", "dal", "marl", "flyn")

	superAdd(1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 9)

	fmt.Println(canIDrink(20))
}

//Go 에서는 함수를 만들때 인풋과 아웃풋의 타입을 정해주어야 한다. -> 빠르게 처리하기 위해
func multiply(a, b int) int {
	return a * b
}

//변수명(인풋)(아웃풋)
func lenAndUpper(_name string) (int, string) {
	return len(_name), strings.ToUpper(_name)
}

//인풋 변수의 갯수제한을 없애려면 타입앞에 ...을 적으면 된다.
func repeatMe(words ...string) {
	//Go에 있는 기능으로 함수가 끝났을때 무언가를 실행하게 할 수 있다.
	defer fmt.Println("repeatMe done")
	fmt.Println(words)
}

//Go의 루프는 모든게 for로 통일되었다.
func superAdd(_numbers ...int) int {
	total := 0
	//range를 사용한 루프문
	for _, num := range _numbers {
		total += num
	}

	//range를 사용하지 않은 같은 루프문
	// for i := 0; i < len(_numbers); i++ {
	// 	total += _numbers[i]
	// }

	fmt.Println(total)
	return 1
}

func canIDrink(_age int) bool {
	//Go에서 특이한 부분은 if 조건문 안에 변수를 선언할 수 있는데, 이런식으로
	//선언하고 사용하면 된다. 또한 if문은 return과 함께하기 때문에 else가 필요없다? 라고 한다.
	// if koreanAge := _age + 1; koreanAge < 20 {
	// 	return false
	// }
	// return true

	//switch 문
	switch koreanAge := _age + 1; {
	case koreanAge <= 20:
		return false
	}
	return true
}

설명은 소스코드에 있는 주석으로 대체합니다.

노마드 코더의 무료 고 강습에서 if-switch 까지의 강의 내용입니다.

+ Recent posts