참고
Go언어의 특징
NOTE
Go는 정적 타입 컴파일 언어의 효율성과 동적 언어처럼 쉬운 프로그래밍을 할 수 있도록 하는 것을 목표로한다!
go의 특징
•
Go언어에는 아래와 같은것이 없다.
◦
클래스
◦
상속
◦
생성자
◦
final
◦
제네릭
Go언어 적용가능한 프로젝트
NOTE
•
웹 서버
•
웹 브라우저
•
검색 엔진
•
컴파일러
•
운영체제
Go언어 맛보기
NOTE
// 이 코드가 속한 패키지가 어디인가?
// 패키지명은 아무렇게 작성해도 되지만, main은 특별함
// main => 프로그램 시작점(프로그램 파일의 시작점을 명시)
// go는 main 패키지 1개와(무조건 1개), 다른 패키지로 구성(여기는 이름 중복되도 됨)
package main
// 패키지명 fmt를 가져온다.
import "fmt"
// func => 함수선언
// main은 특별한 키워드! => 프로그램 시작점
func main() {
fmt.Println("Hello Go World!")
}
/*
주석 블록적용
*/
Go
복사
Go 변수
NOTE
변수 ⇒ 값을 저장하는 메모리 공간을 가리키는 이름!
•
값을 저장한다 ⇒ 하드디스크, 메모리
◦
하드디스크 - 전원이 꺼져도 남아있다, 느리다
◦
메모리 - 전원이 꺼지면 사라진다, 빠르다
•
프로그램 ⇒ 결국 데이터를 연산/조작 하는 일
◦
컴퓨터는 게임, 음악, 비디오를 틀어주는건 결국 데이터 연산/조작으로 이루어짐
변수의 4가지 속성
NOTE
// var 타입 이름 = 값
var a int = 10
Go
복사
•
이름
•
값
•
주소
•
타입
변수 선언방법 및 기본값
NOTE
값을 생략했을때 기본으로 들어가는 값
package main
import "fmt"
func main() {
// 1. 가장 기본적인 방법
var a int = 3
// 2. 값을 생략(기본값이 할당됨
var b int
// 3. 타입을 생략 (값을 보고 자동할당됨)
var c = 4
// 4. 타입과 var을 생략 (:가 var을 대처해줌)
d := 5
var e = "Hello"
f := 3.14
fmt.Println(a, b, c, d, e, f)
}
Go
복사
변수 선언에는 여러 가지 방법이 존재!
타입 변환
NOTE
연산의 각 항목의 타입은 반드시 같아야 한다!
func main() {
a := 3 // int = 64 bit = int64
var b float64 = 3.5
var c int = int(b) // float64 => int 변환(소수점 아래가 사라짐)
d := float64(a) * b
var e int64 = 7
f := a * int(e) // int와 int64는 다름!
fmt.Println(a, b, c, d, e, f)
}
Go
복사
go는 매우강한 타입을 검사한다 (int와 int64도 엄연히 다름!)
변환 주의사항
타입별 범위
func main() {
var a int16 = 3456 // int16 - 2byte 정수
var b int8 = int8(a) // int16 -> 1nt8
fmt.Println(a, b) // 3456, -128
}
Go
복사
int8로 변환해서 int16의 값을 모두 담지못해 초과해버림!
위의 코드를 이미지로 표현
변수 범위
NOTE
// 패키지 전역변수 (어디서나 쓸 수 있음)
var g int = 10
func main() {
var m int = 20
// 변수의 범위 (중괄호 내부에서만 속한다!
{
var s int = 50
fmt.Println(m, s, g)
}
// 이곳에서 s를 사용하면 에러가뜸!
// m = s + 20
}
Go
복사
2진수 실수표현
NOTE
float 32 표현방법
367812, 4 ⇒ 0.367812 * 10^4 ⇒ 3678.12
실제 나타낼 수 있는 범위
func main() {
var a float32 = 1234.523
var b float32 = 3456.123
var c float32 = a * b // 4,266,663.334329
var d float32 = c * 3 // 12,799,990.002987
// 7자리까지 정밀도를 나타내서 실제값과 오차가 있음
//
fmt.Println(a) // 1234.523
fmt.Println(b) // 3456.123
fmt.Println(c) // 4.266663e+06
fmt.Println(d) // 1.2799989e+07
}
Go
복사