Unit 5:: Hello, world!로 시작하기
go 언어 사용 환경 구축
(1). http://golang.org/dl 사이트에 접속해 PC의 OS와 32/62bit, 필요한 버전에 맞게 설치
(2). Go 통합개발환경 설치
https://sourceforge.net/projects/liteide/files/latest/download
설치 후 go 파일 생성
파일 생성 시 자동적으로 다음과 같은 코드 입력됨
>>출력 결과
>> 코드 분석
(1) Go 언어로 작성한 프로그램은 main 패키지부터 실행
(2) import 패키지를 사용하는 키워드. 문자열을 출력하기 위해선 fmt 패키지를 사용
(3) Go언어는 C, C++, Java, C#과 마찬가지로 main 함수부터 시작. fmt 패키지의 Println 함수를 사용하여 Hello, world 문자열을 출력
Unit 6:: 기본 문법 알아보기
(1) 세미콜론(;)
대부분의 언어와 달리 Go 언어에서는 보통 구문 마지막의 세미콜론을 생략
단, 다음과 같이 한 줄에 여러 구문을 사용할 경우에만 세미콜론으로 구분
(2) 주석
한 줄 주석: // 사용
범위 주석: /* ~ */ 사용 - 한 줄에서 일부분만 주석으로 만들거나 여러 줄을 주석으로 생성
(3) 중괄호
함수와 제어문을 시작할 때 반드시 같은 줄에서 중괄호를 시작. 중괄호를 다음줄 부터 시작하면 컴파일 에러가 발생
함수 시작과 제어문 시작과 같은 줄에 중괄호 시작 => 에러 X
함수 시작과 제어문 시작 다음 줄에 중괄호 시작 => 컴파일 에러 발생
(4) 들여쓰기
탭(tab) 사용. 스페이스로 들여쓰기로 했더라도 gofmt 명령으로 소스 정렬 시 모두 탭으로 변경
Unit 7:: 변수 사용하기
go 언어에서 변수 선언하는 방법은 var 키워드를 사용하는 방식과 자료형을 생략하는 방식 두 간지 존재
1. var 키워드 사용하는 방식
자료형이 변수명 뒤에 오며 변수명은 문자와 숫자로 이루어짐
(* 변수명은 문자 또는 _로 시작해야 함, 숫자로 시작할 수 X)
2. 자료형을 생략하는 방식
대입하는 값의 자료형으로 결정. 단, 자료형을 생략할 때는 반드시 초깃값 대입 필요
생략할 시엔 컴파일 에러
7-(1) 짧은 선언 사용
변수명:=초기값
var와 자료형 키워드를 사용하지 않고 간단하게 변수를 선언 후 초기화 가능. if, for 제어문 안에서 임시 변수 사용 시 유용하게 활용
(2) 변수 여러 개 생성
변수를 여러 개 선언 후 초기화할 때는 변수와 값을 , 로 구분하여 나열
(** 변수를 선언한 대로 값이 대입. 선언한 변수의 개수와 대입할 값의 개수가 동일해야 됨)
var 변수1, 변수2 자료형=초기값1, 초기값2
var 변수1, 변수2=초기값1, 초기값2
짧은 선언도 사용 가능 (변수의 자료형은 대입하는 값의 자료형으로 결정)
변수가 선언된 뒤에도 변수 여러 개의 값을 대입 가능=>병렬 할당
변수1, 변수2, 변수3=값1, 값2, 값3
var 키워드와 ( ) 사용
변수의 자료형 지정하거나 생략 가능. 지정 X 시 대입하는 값의 자료형으로 결정
++사용하지 않는 변수 및 패키지 처리
Go 언어는 선언만 하고 사용하지 않는 변수, import 만 하고 사용하지 않는 패키지 존재 시 컴파일 에러 발생
=>변수를 밑줄 문자에 대입하면 컴파일 에러 발생 X
=> import 로 패키지를 가져올 때 패키지 이름 앞에 _(밑줄 문자)를 지정하면 컴파일 에러 발생 X
Unit 8:: 숫자 사용하기
Go 언어 숫자 자료형 종류
(1) 정수
8진수: 숫자 앞에 0을 입력
16진수: 숫자 앞에 0x 또는 0X를 입력
(2) 실수
소수점 사용 혹은 지수 표기법으로 표기. 변수에 저장될 때는 부동소수점 방식 사용
(지수 표기법: E 또는 e를 사용하고, +, -로 소수점의 위치 지정. 이때 밑수는 10)
컴퓨터는 2진수 사용하므로 실수를 정확하게 표현 불가
=>부동 소수점 반올림 오차
따라서 실수는 연산한 값을 ==(등호)로 직접 비교 불가
ex)
10에서 0.1을 10번 빼면 9.0이 나와야 됨
=> 실수형 값을 연산했으므로 오차 발생했을 것
또한 실수를 ==로 비교하면 안 되므로 false 출력될 것
<출력 결과>
실수를 비교하려면 연산한 값과 비교할 값의 차이를 구한 뒤 머신 입실론보다 작거나 같은지 확인
>>코드 수정
<출력 결과>
(3) 복소수
실수부 + 허수부의 형태로 허수부에 마지막에는 i를 입력
실수부와 허수부는 공정소수점, 부동소수점 형태로 표현
변수에 저장할 때 실수부 혹은 허수부를 생략 가능
real 함수 사용하여 복소수에서 실수부 추출
imag 함수 사용하여 복소수에서 허수부 추출
complex 함수 사용하여 표현 가능
실수부 1, 허수부 2i
+복소수도 실수 형태이므로 계산했을 때 오차 발생
(4) 바이트
보통 16진수, 문자 값으로 저장. 큰 따옴표 사용 혹은 문자열은 byte에 저장 X, 컴파일 에러 발생
(5) 룬
유니코드(utf8) 문자 코드를 저장할 때 사용
‘ ‘ (작은 따음표)로 묶어줘야 함
\u, \U를 사용하여 유니코드 문자 코드로 저장 가능 (\U는 16진수 8자리로 설정해야 됨)
(6) 숫자 연산하기
숫자 연산에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%), 시프트(<<, >>), 비트 반전(^) 연산자를 모두 사용 가능
연산 시 자료형이 다르면 컴파일 에러 발생 => 자료형 변환 필요
정수+실수이므로 컴파일 에러
자료형 변환을 통하여 값 출력
** 실수를 정수로 변환하면 소수점 이하 값을 버리게 되므로 주의
(7) 오버플로우와 언더플로우
오버플로우(Overflow): 각 자료형에서 저장할 수 있는 최대 크기를 넘어선 것
언더플로우(Underflow): 각 자료형에서 저장할 수 있는 최소 크기보다 작아진 것
부호 없는 정수의 최댓값에 1을 더한 뒤 컴파일 실행 ==> 컴파일 에러
즉, Go 언어에선 오버플로우 상황 허용 X 또한 부호 없는 정수형 변수에 음수를 저장해도 컴파일 에러 발생
부호 있는 자료형의 최댓값은 math 패키지의 MaxInt8, MaxInt16, MaxInt32, MaxInt64며 최솟값은 MinInt8, MinInt16, MinInt64. 부호 있는 자료형도 최소값 최댓값을 넘어서면 오버플로우 컴파일 에러 발생
(8) 변수의 크기 구하기
unsafe 패키지의 Sizeof 함수를 사용. 이때 크기는 바이트 단위
Unit 9:: 문자열 사용하기
문자열은 “ ” (따음표)로 묶어 UTF-8로 표현
문자 대신 \u 또는 \U를 사용하여 유니코드 문자 코드로 저장 가능 (단, \U는 값을 16진수 8자리로 설정)
\x는 UTF-8 인코딩의 바이트 값을 그대로 저장할 때 사용
* 여러 줄로 된 문자열 저장 시엔 ` `(백쿼트)로 묶어 줌
(1) 문자열 길이 구하기
len() 함수 사용. 이때 "한글" 문자열의 길이는 2가 아니라 6 ( "한글" 을 UTF-8로 저장하면 0xed, 0x95, 0x9c, 0xea, 0xb8, 0x80이기 때문. "Hello"는 문자열 길이 그대로 5
한글 한자 일본어 등 UTF-8로 저장했을 때 2 바이트가 넘는 문자열의 길이를 구하려면 unicode/utf8 패키지의 RuneCountInString 함수 사용
(2) 문자열 연산하기
문자열 비교할 때는 == 연산자 사용. 여러 문자열을 붙일 때는 + 연산자를 사용
문자열은 배열과 동일하게 [ ](대괄호)로 각 문자 가져올 수 있음. (인덱스는 0부터 시작)
>> s1 문자열에서 첫 번째 문자인 'H'를 출력
printf로 출력했을 땐 문자가
Println로 출력하면 아스키코드 출력
(3) 문자열 수정
Go 언어는 변수에 문자열을 저장한 뒤 내용 수정 불가. 문자열의 내용을 수정하려고 하면 컴파일 에러 발생
Unit 10:: 불 사용하기
Go 언어는 참과 거짓을 표현하는 true 와 false를 제공. 불 변수의 크기는 1바이트
보통 불 변수와 값은 AND(&&), OR(||), NOT(!) 논리 연산자와 함께 사용
주로 if 조건문, for 반복문 등을 동작시킬 때 사용
Unit 11:: 상수 사용하기
const 키워드로 상수 생성 가능 - 상수는 소스 코드에서 고정된 값을 체계적으로 관리하고 싶을 때 사용
const 상수명 자료형=초기값
상수는 반드시 선언과 동시에 초기화하며 선언한 뒤에는 값을 변경할 수 X
변수와 마찬가지로 문자 또는 _(밑줄 문자)로 시작해야 하며 숫자로 시작할 수 X
자료형을 생략하면 상수의 자료형은 대입하는 값의 자료형으로 결정
const 상수명1, 상수명2 자료형=초기값1, 초기값2
const 상수명1, 상수명2 = 초기값1, 초기값2
const 키워드와 ( )를 사용하면 상수 여러 개를 한 번에 선언하고 초기화
상수의 자료형을 지정하거나 생략할 수 X. 마찬가지로 자료형을 지정하지 않으면 상수의 자료형은 대입한는 값의 자료형으로 결정. 변수와는 달리 초깃값을 반드시 지정
Unit 12:: 열거형 사용하기
보통 상수는 연속되는 값을 가짐
const 키워드와 ( ) 를 사용하면 const 키워드를 반복하지 않아도 됨
상수에 값을 일일이 대입하지 않고 순서대로 생성하려면 iota 사용 (a로 시작하고 싶으면 iota+a)
Unit 13:: Hello, world!로 시작하기
모르는 것만 정리해 봤다
&^ | AND NOT 비트 연산 | 두 값을 비트 단위로 AND NOT 연산![]() |
&= | AND 비트 연산 후 대입 | 현재 변수를 값으로 AND 연산한 다음 다시 변수에 대입![]() |
|= | OR 비트 연산 후 대입 | 현재 변수를 값으로 OR 연산한 다음 다시 변수에 대입![]() |
^= | XOR 비트 | 현재 변수를 값으로 XOR 연산한 다음 다시 변수에 대입![]() |
&^= | AND NOT 비트 연산 후 대입 | 현재 변수를 값으로 AND NOT 연산한 다음 다시 변수에 대입. 이 연산자는 특정 플래그를 끌 때 주로 사용![]() |
(1) 연산자 우선순위
우선순위 | 연산자 |
5 | * / % << >> & &^ |
4 | + - | ^| |
3 | == != < <= > >= |
2 | && |
1 | || |