Go Program - HiroSung/Study GitHub Wiki

[Go Programming]

  • 7/2. 804호 / 김병진.에듀앤택 강사
  • 프로그래밍 언어론
    • 中 정적언어인 Go
    • cf ) python : 동적언어. H/W가 좋기때문에 필요 데이터 출력이 빨라짐.

I. Go 언어 소개 및 환경

1. Go 특성

  • 컴파일 언어 > 컴파일(문법검사와 수행할 수 있는 전 단계까지 만들어주는) 프로그램이 별도로 필요함. 컴파일 하고 메모리에 올려서 수행
  • 시스템 프로그래밍을 위해 개발
  • C++, Java, Python의 장점.
  • GC 기능 제공
  • 25개 키워드로 프로그래밍 가능.
  • CSP(Communicating Sequential Processes) 스타일의 Concurrent 프로그래밍 지원... Thread 처리. 처리데이터 공유

2. Go 설치 및 실행

  • https://golang.org/dl/
  • 1.10.3 : why? 첫번째는 주버전.서브버젼(기능추가).빌드버젼(툴.컴파일러로소스에 문제가 없을 경우 올림)
  • ~.msi로 설치하면 좋지만 작업폴더도 만들고 ATOM 설치하여 사용하면 좋음.
  • ATOM 설치 : https://atom.io/ (또는 Visual Studio Code도 가능)
  • 수행방법

    go run test.go > 컴파일 go build test.go > 빌드

  • Workspace 폴더

    C:\GoApp 폴더로 정했다면 bin, src , pkg 폴더가 있어야 함.

3. 프로그래밍의 저장소와 이름

  • 변수
    • GO는 메모리에 값을 저장하는 방식
    • 메모리의 값을 저장하는 대표적인 이름 : 변수
    • var로 선언
      var a int
      var f float32 = 11.
      
  • 상수
    • 한번 저장하면 변경 불가
    • const 사용하여 선언
      const C int = 10
      const S string = "Hi"
      
    • Go 키워드(예약어) - 교재 P51 참고

II. 데이터 타입과 문법

1. Go 프로그래밍의 데이터 타입

  • 정적PGM의 형식의 이상형!
    • 정수
    • 소수점
  • 타입(형식)
    • 참/거짓(Boolean) : bool (내부적으로는 숫자로 처리)
    • 문자열 : string
    • 정수형 타입 : 숫자 - int int8 int16 int32 int64 uint...
    • 실수형 : 소수점 - float32 float64 complex64 complex128
    • 기타 : byte (uint8과 동일. 데이터 주고 받고 파일 입출력시 사용), rune (int32와 동일)

2. 문자열

  • 문자열 리터럴
    • 실제데이터
    • Black Quote : '' - Raw String 그대로이 값
    • Double Quote : "" - 복수 라인에 걸쳐 쓸 수 없음. 인용부호 안이 Escape 문자열 들은 특별한 이미로 해석. 문자열에 \n이 있으면 New Line으로 인식

3. 형변환

  • 데이터 타입의 변환
  • 형의변황/형시변환
  • 하나의 데이터 타입에서 다른 데이터 타입으로 변환하기 위해서는 T(v)와 같이 표현
    • T는 변환하고자 하는 타입을 표시하고, v는 변환될 값을 지정한 것.
    • Go에서 타입간 변환은 명시적으로 지정 *
    • 명시적 지정이 없이 변환이 일어나면 런타임 에러가 발생

4. 프로그래밍 연산자

  • 데이터의 정제 작업 : 연산
  • 산술연산자
  • 관계연산자
  • 논리연산자
  • Bitwise연산자
    • 비트단위 연산을 위해 사용. 바이너리 AND, OR, XOR와 바이너리 쉬프트 연산자
    • & , | , ! , << , >>
  • 할당 연산자
    • 값을 할당하는 = 연산자 외에 사칙연산, 비트여난을 축약한 +=, &=, <<= 같은 연산자
    • 포인터 연산자 (함수 할때 사용)
    • C++와 같이 & 혹은 * 을 사용하여 해당 변수의 주소를 얻어내거나 이를 반대로 Dereference할 때 사용
    • 포인터연산자를 제공하지만 포인터 산출 즉 포인터에 더하고 빼는 기능은 제공하지 않음.

5. 프로그램의 제어 - 반복문

  • 특정 코드를 반복할 경우
    • for 구문이 일반적
    • Go는 for 구문 하나만 존재
    • "for 초기값; 조건식; 증감 {...}"의 형식 사용
    package main
    
    func main() {
    	sum := 0
    	for i := 1; i <= 100;i++ {
    		sum += 1
    	}
    
    	println(sum)
    }
    

6. 실습

  • 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

III. 함수와 컬렉션

1. 함수란?

  • 여러 문장을 묶어서 실행하는 코드 블럭의 단위. 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" // 메시지 변경
        }
       

IV. 패키지와 구조체

V. 메서드와 인터페이스

VI. 에러처리

VII. 동시성 및 루틴과 채널 (* 중요)

VIII. 파일 읽기/쓰기와 테스트 F/W

⚠️ **GitHub.com Fallback** ⚠️