기타

go언어 따라해보기(1) - 표준 입출력, if, switch.. case, for, 함수사용법

카멜레온개발자 2021. 12. 4. 21:36

강좌 보면서 따라한 내용을 혹시나 해서 기록해본다

 

package main //이 패키지의 이름은 main이다
//main이라는 package는 '프로그램 시작점'이라는 약속


//아래의 package를 가져와서 포함한다
//fmt를 포함한 아래 목록은 표준 package
import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

//func : 함수
//main 함수는 시작점이다
func main() {
	fmt.Print("Input Number 1 : ")
	//표준 입력을 받기 위한 객체
	reader := bufio.NewReader(os.Stdin)

	//input string과 error를 리턴 받는데, error는 변수에 담지 않는다
	line, _ := reader.ReadString('\n')
    //공백 제거
	line = strings.TrimSpace(line)
    //정수 변환
	n1, _ := strconv.Atoi(line)

	fmt.Print("Input Number 2 : ")
	line, _ = reader.ReadString('\n')
	line = strings.TrimSpace(line)
	n2, _ := strconv.Atoi(line)

	fmt.Printf("Input Number : %d %d", n1, n2)

	fmt.Print("Input Operator : ")
	line, _ = reader.ReadString('\n')
	line = strings.TrimSpace(line)

	if line == "+" {
		fmt.Printf("%d + %d = %d", n1, n2, n1+n2)
	} else if line == "-" {
		fmt.Printf("%d - %d = %d", n1, n2, n1-n2)
	} else if line == "*" {
		fmt.Printf("%d * %d = %d", n1, n2, n1*n2)
	} else if line == "/" {
		fmt.Printf("%d / %d = %d", n1, n2, n1/n2)
	} else {
		fmt.Println("Bad Input!!!")
	}

	switch line {
	case "+":
		fmt.Printf("%d + %d = %d", n1, n2, n1+n2)
	case "-":
		fmt.Printf("%d - %d = %d", n1, n2, n1-n2)
	case "*":
		fmt.Printf("%d * %d = %d", n1, n2, n1*n2)
	case "/":
		fmt.Printf("%d / %d = %d", n1, n2, n1/n2)
	default:
		fmt.Println("Bad Input!!!")
	}

}

 

go는 case 문 안에 수식이 들어가도 되고,

switch에 공백이 있으면 true가 기본 값이다

package main

import "fmt"

func main() {
	x := 30

	switch {
	case x > 20:
		fmt.Println("X는 20보다 크다")
	case x < 20:
		fmt.Println("X는 20보다 작다")
	default:
		fmt.Println("Dfault")
	}
}

 

for 문은 다음과 같이 쓴다

package main

import "fmt"

func main() {

	i := 0
	for i < 10 {
		if i > 0 {
			fmt.Print(",")
		}
		fmt.Print(i)
		i++
	}
	fmt.Println()

	for j := 0; j < 10; j++ {
		if j > 0 {
			fmt.Print(",")
		}

		fmt.Print(j)
	}
	fmt.Println()
}

조건문에 공백이면 true이다(무한루프)

break, continue등도 사용가능

package main

import "fmt"

func main() {

	i := 0
	for {
		if i > 0 {
			fmt.Print(",")
		}
		fmt.Print(i)

		i++
		if i > 9 {
			break
		}
	}
	fmt.Println()

	for j := 0; j < 10; j++ {

		if j == 3 {
			continue
		}

		if j > 0 {
			fmt.Print(",")
		}

		fmt.Print(j)
	}
	fmt.Println()
}

 

* 함수

더보기
//함수명(변수 타입, ) 리턴값
//리턴은 복수개 가능
func add(x int, y int) int {
	return x + y
}

func main() {
	// for i := 0; i < 10; i++ {
	// 	fmt.Printf("%d + %d = %d\n", i, (i + 2), add(i, i+2))
	// }

	a, b := func1(2, 3)
	fmt.Println(a, b)

}

//같은 타입이면 마지막에 붙여도 됨
func func1(x, y int) (int, int) {
	func2(x, y)
	return y, x
}

func func2(x, y int) {
	fmt.Println("func2", x, y)
}