Go언어 입문 #1

학미새🐥·2022년 2월 21일
1
post-custom-banner

변수

package main

import "fmt"

func main() {
	var a int = 10
	var msg string = "Hello"
    
    a = 20
    msg = "Good Morning"
    
    fmt.Println(msg, a)
}

Go언어의 특징점

  • 세미콜론(;)을 생략해도 된다.
  • import "fmt" : 출력을 위해 불러오는 외부 패키지 fmt
  • fmt.Println(msg,a) : fmt 패키지 내의 Println 출력함수를 실행
    괄호 안의 인자들은 여러개일 때 (공백 한칸)으로 구분되어 출력

var a int = 10

  1. 변수를 선언하겠다
  2. 변수의 이름은 a 이고,
  3. 변수의 타입은 integer이다.

의 순서대로 변수를 선언해주고, 값은 대입연산자(=)를 통해 대입한다.


타입

  • uint (unsigned int) : 부호없는 정수 (다 양수)
    8bit(1byte), 16, 32, 64
  • int : 부호있는 정수
    8, 16, 32, 64
  • float : 부호있는 실수
    32, 64
  • byte : uint8의 별칭
  • rune : 문자1개, UTF-8(한글자에 1~3byte) int32의 별칭(4byte)
  • int : 컴퓨터에 따라 사이즈가 달라짐 (요즘 컴퓨터엔 대부분 64b)
  • bool : true/false (기본값 false)
  • string : 문자열 (기본값 "")
  • 배열 : 사이즈 정함
  • 슬라이스 : 사이즈가 정해져있지 않은 배열
  • 구조체 , 포인터 ... 등등

별칭 타입

type myInt int : int를 myInt라고 별칭을 지정하는 것

변수 선언법

var a int = 10
var a int : 초기값 생략 가능(정수의 기본값은 0)
var a = 10 : 타입을 생략하려면 초기값 반드시 설정(정수 자동 설정)
a := 10 : var와 타입을 모두 생략할 때. "선언대입문"

타입 변환

연산의 각 항목의 타입이 반드시 같아야 한다.(사이즈가 달라도 안됨)
다를 시 타입변환을 해야 한다.

package main
import "fmt"

func main() {
	a := 3 //int
    var b float64 = 3.5
    
    var c int = int(b) //타입변환 3.5 -> 3
    d := float64(a) * b 
    
    var e int64 = 7
    f := a * int(e)  //int와 int64도 다름
    
    fmt.Println(a,b,c,d,e,f)
    //3 3.5 3 10.5 7 21

fmt 패키지를 이용한 텍스트 입출력

표준 출력 함수

  • Print() : 출력 (여러값들 사이에 공백X)
  • Println() : 출력하고 개행 (여러값들 사이에 공백 띄움)
  • Prinf() : 서식(format)에 맞게 출력
    fmt.Printf("a: %d b: %d, f: %f\n", a, b, f)

서식 지정자

  • %v : 데이터 타입에 맞춰서 기본 형태로 출력
  • %T : 데이터 타입 출력
  • %t : 불리언 출력
  • %e : 지수 형태로 실숫값 출력
  • %f : 지수 형태가 아닌 실숫값 그대로 출력
  • %g : 값의 크기에 따라 지수형태 혹은 실숫값 그대로 출력

표준 입력 함수

  • Scan() : 입력받기
  • Scanf() : 서식 형태로 입력받기
  • Scanln() : 한 줄을 읽어서 입력받기
var a int
var b int

n, err := fmt.Scanln(&a, &b) //& : 변수의 메모리 주소값
if err != nil {
	fmt.Println(err)
} else {
	fmt.Println(n, a, b)
}

입력 버퍼

package main

import (
	"bufio"
    "fmt"
    "os"
)

func main() {
	stdin := bufio.NewReader(os.Stdin)
    
    var a int
    var b int
    
    n, err := fmt.Scanln(&a, &b) //Scanln의 리턴값이 두가지
    if err != nil {  //문제가 발생하면
    	fmt.Println(err)
        stdin.ReadString('\n')  //개행문자가 나올때까지 읽어라
    } else {
    	fmt.Println(a,b)
    }

-> 오류 발생으로 인해 버퍼에 남아있는 글자들을 비우기 위해 모두 읽기

profile
뭐든 다해보려는 공대생입니다
post-custom-banner

0개의 댓글