Go Program - HiroSung/Study GitHub Wiki
[Go Programming]
- 7/2. 804호 / 김병진.에듀앤택 강사
- 프로그래밍 언어론
- 中 정적언어인 Go
- cf ) python : 동적언어. H/W가 좋기때문에 필요 데이터 출력이 빨라짐.
- 컴파일 언어 > 컴파일(문법검사와 수행할 수 있는 전 단계까지 만들어주는) 프로그램이 별도로 필요함. 컴파일 하고 메모리에 올려서 수행
- 시스템 프로그래밍을 위해 개발
- C++, Java, Python의 장점.
- GC 기능 제공
- 25개 키워드로 프로그래밍 가능.
- CSP(Communicating Sequential Processes) 스타일의 Concurrent 프로그래밍 지원... Thread 처리. 처리데이터 공유
- https://golang.org/dl/
- 1.10.3 : why? 첫번째는 주버전.서브버젼(기능추가).빌드버젼(툴.컴파일러로소스에 문제가 없을 경우 올림)
- ~.msi로 설치하면 좋지만 작업폴더도 만들고 ATOM 설치하여 사용하면 좋음.
- ATOM 설치 : https://atom.io/ (또는 Visual Studio Code도 가능)
- https://git-scm.com/downloads 에서 git을 다운로드하여 설치하면
- workspace 를 C:\goApp로 지정함
- Go Programming에 연결될시 github를 사용할 수 있어 용이함.
- cf) ATOM 사용방법 : https://seoulrain.net/2016/12/05/atomeditor/
- 수행방법
go run test.go > 컴파일 go build test.go > 빌드
- Workspace 폴더
C:\GoApp 폴더로 정했다면 bin, src , pkg 폴더가 있어야 함.
- 변수
- GO는 메모리에 값을 저장하는 방식
- 메모리의 값을 저장하는 대표적인 이름 : 변수
- var로 선언
var a int var f float32 = 11.
- 상수
- 한번 저장하면 변경 불가
- const 사용하여 선언
const C int = 10 const S string = "Hi"
- Go 키워드(예약어) - 교재 P51 참고
- 정적PGM의 형식의 이상형!
- 정수
- 소수점
- 문
- 타입(형식)
- 참/거짓(Boolean) : bool (내부적으로는 숫자로 처리)
- 문자열 : string
- 정수형 타입 : 숫자 - int int8 int16 int32 int64 uint...
- 실수형 : 소수점 - float32 float64 complex64 complex128
- 기타 : byte (uint8과 동일. 데이터 주고 받고 파일 입출력시 사용), rune (int32와 동일)
- 문자열 리터럴
- 실제데이터
- Black Quote : '' - Raw String 그대로이 값
- Double Quote : "" - 복수 라인에 걸쳐 쓸 수 없음. 인용부호 안이 Escape 문자열 들은 특별한 이미로 해석. 문자열에 \n이 있으면 New Line으로 인식
- 데이터 타입의 변환
- 형의변황/형시변환
- 하나의 데이터 타입에서 다른 데이터 타입으로 변환하기 위해서는 T(v)와 같이 표현
- T는 변환하고자 하는 타입을 표시하고, v는 변환될 값을 지정한 것.
- Go에서 타입간 변환은 명시적으로 지정 *
- 명시적 지정이 없이 변환이 일어나면 런타임 에러가 발생
- 데이터의 정제 작업 : 연산
- 산술연산자
- 관계연산자
- 논리연산자
- Bitwise연산자
- 비트단위 연산을 위해 사용. 바이너리 AND, OR, XOR와 바이너리 쉬프트 연산자
- & , | , ! , << , >>
- 할당 연산자
- 값을 할당하는 = 연산자 외에 사칙연산, 비트여난을 축약한 +=, &=, <<= 같은 연산자
- 포인터 연산자 (함수 할때 사용)
- C++와 같이 & 혹은 * 을 사용하여 해당 변수의 주소를 얻어내거나 이를 반대로 Dereference할 때 사용
- 포인터연산자를 제공하지만 포인터 산출 즉 포인터에 더하고 빼는 기능은 제공하지 않음.
- 특정 코드를 반복할 경우
- for 구문이 일반적
- Go는 for 구문 하나만 존재
- "for 초기값; 조건식; 증감 {...}"의 형식 사용
package main func main() { sum := 0 for i := 1; i <= 100;i++ { sum += 1 } println(sum) }
-
if
func main() { var result bool = false var firstData int = 200 var secData int = 500 thiData := 1000 // var thiData int = 1000 // if condition { // } if firstData > secData { } else { } if firstData < secData { } else if firstData == secData { } // switch expression { // case condition: // } var dataResult string var sec int = 1 switch dataResult { case 1: // what } }
-
for
- 여러 문장을 묶어서 실행하는 코드 블럭의 단위. func 키워드를 사용하여 정의
- func 뒤에 함수명을 적고 괄호()안에 그 함수에 전달하는 파라미터
- Pass By XXXXXX
- 파라미터를 전달하는 방식은 크게 Pass By Value와 Pass By Reference
- Pass By Value
- 값 만 전달
- 호출하기 전 함수의 값만 그대로 전달
- 원본 함수의 값은 변경되지 않음.
- Pass By Reference
- 참조 전달. 받을때는 *, 전달할때는 & 기호 사용.
- 호출함수에서 값을 변경하면 원본 함수도 값이 변경됨.
package main func main() { msg := "Hello" say(&msg) println(msg) // 변경된 메시지 출력 } func say(msg *string) { println(*msg) *msg = "Changed" // 메시지 변경 }