Go언어란?
홈페이지 주소: golang.org
온라인 Go 언어 컴파일러 : play.golang.org
- Go 언어의 역사
- Go 언어의 특징
- Go 언어의 쓰임새
Go언어는 구글에서 로버트 그리스머, 롭 파이크, 켄 톰슨이 이끌어 만들어 2009년 발표된 오픈소스 프로그래밍 언어이다.
즉, 무료이며, 언어 발전에 기여 가능하다.
해당 언어는 심플하며, 성능이 좋다.
해당 언어는 범용 언어로, 다양한 용도로 사용되지만
특히 백엔드 서버와 시스템 개발에 적합하며, 강력한 동시성 프로그래밍을 지원함
그 이유는 성능이 좋기 때문이다.
특징 요약
- 클래스: 없음, 그러나 메서드를 가지는 구조체를 지원함
- 상속: 없음
- 메서드: 있음, 구조체는 메서드를 가질 수 있음
- 인터페이스: 있음, 상속은 없음
- 익명 함수: 있음, 함수 리터럴이라는 이름으로 제공함
- 가비지 컬렉터: 있음, 고성능 가비지 컬렉터를 제공함
- 포인터: 있음
- 제네릭 프로그래밍: 없음
- 네임스페이스: 없음
코드 실행 과정
- 폴더 생성
- .go파일 생성 및 작성
- Go 모듈 생성
- 빌드
- 실행
폴더 생성
Go 언어에서 모든 코드는 패키지 단위로 작성됨.
같은 폴더에 위치한 .go 파일은 모두 같은 패키지에 포함되며, 폴더명이 패키지명이 됨.
예를들어서, goproject/hi/plus
hi 폴더에 든 .go 파일은 hi 패키지에 속하고, plus 폴더에 든 .go파일은 plus 패키지에 속함
Go 코드는 .go 확장자의 파일임
Go 모듈 생성
Go 1.16 버전 이후로 Go 모듈이 기본으로 적용된다.
따라서 모든 Go 코드 빌드 전에 모듈 생성이 필요하다.
이때, 모듈 생성은 아래의 명령으로 실행한다.
$ go mod init 모듈명
# 예를 들면
$go mod init goproject/hi
모듈 생성시, go.mod 파일이 생성되고, 해당 파일에는 모듈명, Go 버전, 필요한 패키지 목록에 대한 정보가 담겨있다.
빌드
$ go build
위 명령어를 통해 Go 코드를 기계어로 변환하여 실행 파일을 만든다.
GOOS와 GOARCH 환경변수 조정을 통해 다른 운영체제 및 아키텍처에서도 호환 가능한 실행 파일 제작이 가능하다.
(터미널에서 $ go tool dist list 명령을 통해 호환 가능한 운영체제 및 아키텍처 목록을 확인할 수 있다. )
기본 코드에 대한 구조
package main
// 패키지 선언: 해당 코드가 어떤 패키지에 속하는지 알려줌
// 패키지는 코드의 묶음이며, 여러 기능을 제공함
// Go 파일의 코드는 항상 패키지 선언으로 시작해야함
// 1번 라인은 main 패키지에 속한 코드임을 컴파일러에 알려주는 역할을 함
// main 패키지는 프로그램 시작점을 포함하는 중요한 패키지임
import "fmt"
// fmt 패키지를 가져오겠다는 의미를 가짐
// fmt는 패키지 표준 입출력을 다루는 내장 패키지임
func main(){
fmt.Println("Hi World")
// fmt.println()는 표준 출력으로 문자열을 출력하는 함수임.
// 표준 출력이란 터미널 화면을 말함.
// Go언어 프로그램은 main()함수 부터 시작되고, main() 함수가 종료되면 프로그램이 종료됨.
}
// Go 언어에서는 외부로 노출되는 함수 앞에는 함수명으로 시작하는 주석을 달아서 함수를 설명하는 것을
// 코딩 규약으로 권장함
/* 여러줄
주석*/
변수
- 변수 선언
- 변수 속성
- 타입 변환
- 숫자 표현
변수란 값을 저장하기 위한 메모리 공간을 가리키는 것이다.
변수는 이름, 값, 타입, 주소 속성을 가지며, 변수 간 값의 전달은 항상 복사로 일어난다.
컴퓨터에서 프로그램의 코드는 메모리의 데이터를 언제 변경할지 나타낸 문서이다.
따라서, 프로그래밍은 메모리에 있는 데이터 조작이 핵심이다.
이를 변수를 이용하면 쉽게 할 수 있다.
변수 사용을 위해 아래와 같이 선언할 수 있다.
코드에서 변수를 선언을 한다는 것은 컴퓨터에서 코드 실행시 변수를 위한 메모리 공간을 할당한다는 의미를 내포한다.
따라서, 변수는 이름, 값, 타입, 주소를 속성으로 가진다.
package main
import "fmt"
func main(){
var tmp int = 11
}
위 코드와 달리 쉽게 변수 선언을 하기 위해 초깃값을 생략하거나 변수 타입을 생략하는 등 다양한 선언이 가능하다.
변수의 타입은 처음 변환한 타입에서 변환할 수 있다. Go언어는 다른 언어들과 달리 타입에 대한 자동 변환을 지원하지 않는다.
따라서 연산하거나 대입을 위한 타입 변환을 수동적으로 해줘야한다.
변수 타입 중 숫자 타입은 변수 크기에 따라서 표현할 수 있는 값의 범위가 다르다.
실수 타입은 유효 자릿수가 정해져 있으므로, 잘 확인하고 변수를 사용해야한다.
텍스트 입출력 패키지 fmt
제목과 같이 Go에서는 fmt 패키지를 통해 데이터 표준 입출력을 할 수 있다.
이때, 표준 입출력이란 터미널에서 데이터를 출력하고 입력하는 것을 말한다.
표준 출력 함수로 Print(), Printf(), Println()을 사용할 수 있다.
표준 입력 함수로 Scan(), Scanf(), Scanln()을 사용할 수 있다.
변수를 출력할 때, 서식 문자를 활용해 최소 출력 너비 및 소숫점 이하로 몇개의 숫자까지 표현하는지 등 다양한 형식으로 출력할 수 있다.
서식 문자 %v를 사용할 경우, 모든 타입의 기본 서식으로 출력할 수 있다.
입력받을 때, 에러 발생시 표준 입력 스트림을 지우는 것이 좋다.
연산자
C와 같이 산술 연산자로 사칙 연산, 비트 연산, 시프트 연산자가 있다.
만약 정수 타입 숫자에서 경계 값에서 연산할 경우 주의가 필요하다.
실수 타입에 대해 값의 같음을 확인하는 == 연산자 사용시, 정상적으로 동작하지 않을 수 있다.
복합 대입 연산자를 통해 연산을 간편하게 줄여 사용할 수 있다.
함수
함수는 한편으로는 코드 블럭 단위이다.
함수를 사용하면 코드 재사용을 용이하게 할 수 있다.
반환값이 여러개인 함수를 멀티 반환 함수라 하며, 함수 선언할 때, 반환 타입을 소괄호로 묶어 표시한다.
함수는 다음과 같이 정의할 수 있다.
func Sub(a int, b int) int {
return a - b
}
해당 글은 [Tucker의 Go 언어 프로그래밍] 3장~7장을 읽고 공부한 글입니다.
'Golang' 카테고리의 다른 글
[묘공단] Go언어 기초 15-17장(문자열, 패키지) (0) | 2024.01.23 |
---|---|
[묘공단] Go언어 기초 12-14장(배열, 구조체, 포인터) (0) | 2024.01.23 |
[묘공단] Go언어 기초 8-11장(상수, if문, switch문, for문) (1) | 2024.01.23 |
[묘공단] Go언어 기초 2장 프로그래밍 언어 (0) | 2024.01.23 |
[묘공단] Go언어 기초 1장 컴퓨터 원리 (2) | 2024.01.23 |