[Go] Golang 기초 - 3

2022. 8. 2. 11:44·개발/Go
728x90
반응형

1. 변수의 특성

변수는 이름, 값, 주소, 타입 이라는 4가지 속성을 가지고 있다.

이름 과 값은 기초 -2 에 있다.

주소 : 메모리상의 위치를 나타내기 위해서는 주소가 필요하다. 1바이트씩 주소를 매기는데 변수는 주소를 가진다.

타입 : 변수의 타입(정수,실수,문자열 등) -> 타입은 사이즈를 가지고 있고 그 사이즈는 고정되어 있다.

(int32-> 사이즈 : 4바이트)

 

var a(이름) int(타입) = 10(값)

 

2. 타입

(1) 숫자 타입 : 정수, 실수

uint8, uint16, uint32, uint64 : unsigned integer의 약자로 부호없는 정수이다.

int8, int16, int32, int64 : integer의 약자로 부호 있는 정수이다.

float32, float64 : 실수 , 소수점이 있는 숫자를 나타낼때

 

바이트 : uint8과 같다 -> 부호없는 1바이트

rune : 문자 1개를 나타내는 타입

int : 사이즈가 플랫폼에 따라서 달라진다 -> 32비트 컴퓨터라면 int32, 64비트 컴퓨터라면 int64이다.

uint : int와 동일한 방법으로 사이즈를 가진다.

 

(2) 그 외 타입

bool : true 또는 false를 값으로 가진다.

string : 문자열

배열 : [] -> 같은 타입의 요소를 여러개 가짐

슬라이스 : 사이즈가 정해져있지 않은 배열

구조체, 포인터, 함수타입, 맵, 인터페이스, 채널 등등이 있다.

 

(3) 별칭 타입

rune : int32

byte : uint8 등등

type Myint int 라고 정해주면 int나 Myint로 적어줄 수 있다.

 

3. 여러가지 변수 선언법

var a int = 10

var a int : a는 기본값 0을 가짐

var a = 10 : 뒤의 값의 타입과 같아짐 -> a는 int를 가진다 -- 타입을 생략하면 반드시 초기값을 적어줘야 한다.

a:=10 : 선언 대입문으로 변수를 선언하면서 대입하는 것이다 var a = 10 과 같은 의미이다. 이 형태를 많이 쓴다.

 

4. 여러가지 선언

package main

import "fmt"

func main(){
	var a int = 3
    var b int
    var c = 4
    d := 5
    var e = "Hello"
    f := 3.14
    
    fmt.Println(a,b,c,d,e,f)
}

 

5. 타입 변환

package main

import "fmt"

func main (){
	a := 3 // 3은 int 따라서 나는 64비트컴퓨터이기 때문에 int64와 같지만 정확히는 int이다.
    var b float64 = 3.5
    
    var c int = int(b) // 실수를 정수로 바꾸면 소숫점 아래값은 사라진다 (버림)
    
    d := float64(a) * b
    
    var e int64 = 7
    f := a * int(e)
    // int가 int64라도 int와 int64는 다른 타입으로 받아들인다.
    
    fmt.Println(a,b,c,d,e,f)
    // 3 3.5 3 10.5 7 21
}

// 타입 변환도 int를 string으로 바꾸는건 안된다 : go에서 허용하는 타입변환만 가능

6. 타입별 값의 범위

자료형 저장범위 설명
uint8 0 ~ 255 부호 없는 8비트 정수형
uint16 0 ~ 65,535 부호 없는 16비트 정수형
uint32 0 ~ 4,294,967,295 부호 없는 32비트 정수형
uint64 0 ~ 18,446,744,073,709,551,615  부호 없는 64비트 정수형
uint   32비트 or 64비트
int8 -128 ~ 127  부호 있는 8비트 정수형
int16 -32,768 ~ 32,767  부호 있는 16비트 정수형
int32 -2,147,483,648 ~ 2,147,483,647  부호 있는 32비트 정수형
int64 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 부호 있는 64비트 정수형
int   32비트 or 64비트
float32   32비트, 소수점7자리까지 표현
float64   64비트, 소수점15자리까지 표현
complex64   float32 실수,허수로 구성된 복소수
complex128   float64 실수,허수로 구성된 복소수
uintptr   uint와 같은 크기의 포인터형
bool   true or false값의 8비트 자료형
byte   8비트 자료형
rune   유니코드 저장 자료형, uint와 크기동일
string   문자열을 저장하기 위한 자료형

7. 타입변환 주의사항

 

float을 int로 바꾸면 소숫점이 날아감

큰그릇의 값을 작은그릇에 옮기려면 큰그릇의 값이 버려질수 있다.

작은 그릇의 값을 큰그릇의 값에 롬기면 다 들어간다.

 

package main

import "fmt"

func main(){
	var a int16 = 3456 //a는 int16타입 -> 2바이트 정수
    var b int8 = int8(a) // int16-> int8
    
    fmt.Println(a,b) // 3456 -128
}

 

2진수로 표현된 1바이트 1바이트 로 구성되있다가 작은 1바이트 하나로 값을 옮기려면 앞의 바이트가 날아간다.

-> 상위 1바이트가 없어진다. -> 큰타입에서 작은타입으로 값을 이동할 때 값이 짤릴수 있다.

 

8. 변수 범위

package main

import "fmt"

var g int = 10

func main(){
	var m int = 20
    
    {
    	var s int = 50
        fmt.Println(m,s,g)
    }
    
    m = s + 20 //에러난다.
}

 

 

g 는 패키지 전역변수이다. package안에서 모두 사용할수 있다.

s 는 {}안에 있기 때문에 그 변수는 {}안에서만 유효하다. 이를 지역변수라 한다.

 

9. 숫자타입 표현

 

2진수 정수 표현

     0 000000000110000

맨앞의 0을 부호비트라고 하는데 부호비트가1이면 음수이다.

 

2진수 실수 표현

float 32비트 소수부 : 7자리까지 가능

float 64비트 소수부 : 15자리까지 가능

부호비트 지수부(8비트) 소수부(23비트)

152.345 = 0.152345 x 10의 3승  => 지수표현이라고 한다

                   152345, 3 두숫자만 알면 숫자 표현 가능

float은 소숫점 자리수가 한정되어 있기 때문에 소숫점 계산을 하면 할수록 오차가 심해질수 있다.

이를 생각하면서 코드를 짜야한다.

 

 

 

728x90
반응형

'개발 > Go' 카테고리의 다른 글

[Go] 연산자  (0) 2022.08.10
[Go] Golang fmt 패키지  (0) 2022.08.03
[Go] Golang 기초 - 2  (0) 2022.08.02
[Go] Golang 기초 - 1  (0) 2022.07.26
[Go] Go 설치 및 기초  (0) 2022.07.25
'개발/Go' 카테고리의 다른 글
  • [Go] 연산자
  • [Go] Golang fmt 패키지
  • [Go] Golang 기초 - 2
  • [Go] Golang 기초 - 1
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컨테이너
    하이퍼레저
    30일챌린지
    명령어
    go
    go언어
    블록체인
    node.js
    html
    erc20
    CSS
    도커
    mysql
    React
    프로그래머스
    node
    nodejs
    30일 챌린지
    ERC721
    js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[Go] Golang 기초 - 3
상단으로

티스토리툴바