본문 바로가기
Go-공부하기

Go. Tutorial 2 - Echo Program 2

by Thdnice 2020. 12. 22.
반응형

 

go 를 활용한 튜토리얼 2번째, 첫번째와 같이 입력을 받아서 다시 출력을 한다. 단 이 번에는 입력받은 값에 10을 더해서 출력을 하려고 하는데, 그럴려면

1. 입력받은 문자열을 숫자(Numeric,  즉 float 또는 int) 로 바꿔줘야 함. 

2. 숫자 더하기 연산을 해야함. 

와 같은 2가지 추가 행위를 해줘야 한다. 튜토리얼 코드는 아래와 같다.

 

package main

import(
  "bufio"
  "fmt"
  "os"
  "log"
  "strings"
  "strconv"
)

func main() {

  fmt.Print("Enter input : ") // Print & Println 의 차이는 개행 차이임.
  reader := bufio.NewReader(os.Stdin) 
  input, _ := reader.ReadString('\n') 
  fmt.Println("Output :", input)

// 입력받은 숫자에 10 더하기
  s := strings.TrimSpace(input) 
  value, err := strconv.ParseFloat(s, 64) 
  if err != nil {  //역시 없으면 err을 쓰지 않았기 때문에 에러 발생함
	  log.Fatal(err)
  }

  fmt.Println("Output(Numeric Version) :", value+10) // 숫자에 10 더해서 출력

  //

}

 

일단 이전의 내용의 복습해보자.  reader.ReadString 이나, strconv.ParseFloat 와 같은 method 는 단순히 값만 반환하는 것이 아니라 값과, 함수의 종료 상태를 같이 반환하기 때문에 이를 할당하는 변수도 마찬가지로 2개가 되어야 한다. 만약 굳이 함수의 종료 상태가 궁금하지 않다면 값은 변수로, 그리고 상태는 언더바 ' _ ' 로 받아서 쓰지 않고 그냥 버려도 된다. (언더바 변수명은 굳이 사용하지 않아도 예외적으로 허용됨). 또는 err 와 같이 별도의 변수를 만들어서 값과 상태를 모두 할당 받고 이를 활용해서 만약 함수가 제대로 종료되지 않았으면 log모듈의 fetal 함수를 사용하여 프로그램을 종료시킬 수 있다. 

이번에 처음 사용한 TrimSpace 라는 함수는 strings라는 모듈에 포함되어 있는 함수로, 인자로 받는 문자열의 빈공간 (white space)를 제거하는 역활을 한다. 여기서 빈공간은 단순 띄어쓰기 뿐 아니라 Tab(\t), 개행(\n) 등을 모두 포함한다. 

이렇게 빈공간을 제거한 문자열의 형을 바꾸기 위해서는 strconv 라는 모듈의 ParseFloat 이라는 함수를 사용하면 된다. 이 함수는 2개의 인자를 받아 (문자열, 그리고 데이타형). 타 언어에서는 float(S) 라던가 as.numeric(S) 등의 내장함수로 쉽게 변환이 가능한데 (심지어 일부는 자동으로도 가능) Go에서는 형변환이 다소 엄격함을 느낄 수 있다. (물론 변수를 선언하고 사용하지 않기만 해도 단순 경고( Warning )대신 에러( Error )를 뿜을 때 부터 심상치 않기는 했다.)

반응형

'Go-공부하기' 카테고리의 다른 글

Go. - Functions 2  (0) 2022.04.25
Go. - Function  (0) 2022.04.23
Go. - variables  (0) 2022.04.17
Go. Tutorial 1 - Echo Program  (0) 2020.12.16