파이썬과 차이점
-> while 문이 없고, switch문이 있다.
- scale up : 성능을 높이는 것
- scale out : 장비를 추가해서 확장하는 방식
- GOPATH 환경 변수
- 작업 공간의 기본 디렉터리
: GOPATH=$HOME/go
GOPATH=%USERPROFILE%\go
cf.) 셸이란?
설치된 패키지 실행위치
- %GOPATH%\bin
%GOPATH%\src
- go run go 파일... | go 패키지 (바로 실행)->임시 실행파일 생성
-작은 프로그램 테스트
-Go를 스크립트 언어처럼 사용 시
- go build go 파일... | go 패키지 (실행파일 생성)->최종 배포본 생성
-바이너리(실행파일) 생성
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
go run hello.go 실행
go build hello.go 실행
go build hello.go
go build -o hello_world.exe
hello.go
- cmd에서 메모장 안켜질때
-> 시스템 환경변수에 추가해야 함.
- go는 다른 언어와 달리 자신의 코드 저장소를 공유하여 패키지를 직접 다운받고 설치 가능
go install github.com/rakyll/hey@latest
hey https://www.golang.org
* go fmt
-들여쓰기 공백 수정
-구조체 항목 정렬
-연산자 주변 적절한 공백 사용 체크
* goimports
-import 문 정리
-알파벳 순 정렬
-사용되지 않은 import 삭제
-import 추측(추론): 100% 정확하지 않음
-enhanced go fmt
-go install 명령으로 설치 필요 (p.28 참조)
* 세미콜론 삽입 규칙
-go fmt는 이 규칙에 의해 잘못 삽입된 중괄호({})는 수정 못함
-Go 컴파일러가 자동으로 문장 끝에 세미콜론을 붙여줌
-규칙
-식별자
-기본 리터럴
-다음 토큰 중 하나: break, continue, fallthrough, return, ++, --, }, )
-> 오류부분을 바꿔주지 않고 알려줌
(C와 비슷)
* Effective Go
-https://go.dev/doc/effective_go
* Go 위키의 코드 리뷰 규칙
-설치
1) 불리언
2) 숫자
-정수: 주로 int 사용, 경우에 따라 byte
-실수
-복소수
3) 문자열
4) 별칭: byte(unit8), rune(int32)
- 선언되었으나 값이 할당되지 않은 변수에 기본 값 제로(0) 할당
- 코드에 작성하는 값 그 자체
* 정수 리터럴
-10진수, 8진수, 16진수, 2진수 ⇒ 접두사 이용 (없음, 0o, 0x, 0b)
-밑줄(underscore): 정수 리터럴 사이에
* 부동 소수점 리터럴
-점(.)
-e(E) 지수 표현
-밑줄 가능
* 룬 리터럴
-작은 따옴표
-단일 유니코드 문자, 8비트 8진 숫자, 8비트 16진수 숫자, 16비트 16진수 숫자, 32비트 유니코드
-이스케이프 시퀀스: ‘\n’, ‘\t’, …
* 문자 리터럴
-두 가지 방법
-1) 해석된 문자열 리터럴: 큰 따옴표 사용
-이스케이프 룬이 처리가 됨
-2) 로(raw) 문자열: 역따옴표(백틱) 사용
- 다른 타입으로 선언된 두 정수는 연산 불가능
-하지만, 부동소수점 변수에 정수 리터럴 사용 가능
정수 변수에 부동소수점 리터럴 사용 가능
-왜냐, 리터럴 자체에는 데이터 타입이 없으므로- Go 언어는 실용적 언어 => 리터럴에는 타입이 정해져 있지 않다
정수 타입
-특수한 경우 아니면 int 사용
특수 정수 타입들
-byte: unit8 보다 선호
-int: 플랫폼에 따라서 int32, int64
-uint: 플랫폼에 따라서 uint32, uint64
-rune: int32지만 용도가 다르다
-uintptr: 포인터
정수 연산자
-산술연산자의 결과는 정수
-복합대입연산자도 지원
-비교연산자
-비트연산자
-시프트연산자
-논리연산자
부동소수 타입
-float32, float64(기본 타입)
-%(나머지 연산)에 대해서는 정의되어 있지 않음
-부동소수 변수끼리 ==, != 비교는 가능하나 사용하지 말자
복소수 타입
package main
import "fmt"
func main() {
fmt.Println("hello world!")
fmt.Println("Greetings and\n\"Salutations\"")
fmt.Println(`Greetings and
"Salutations"`)
var x = 10
var y = 3
fmt.Println(x / y)
fmt.Println(x % y)
}
cf.) Explicit vs. Implicit
명시적 vs. 암시적(암묵적)
=> Manual vs. Automatic
자동 타입 변환
-편리하나
-변환 규칙이 복잡, 예기치 못한 결과 초래 가능
Go는 자동 타입 변환 불허
-의도의 명확성 및 가독성 중시 때문
-명시적으로 타입 변환해야 함
->모든 타입 변환 규칙을 외울 필요 없음
다른 Go 타입을 불리언으로 취급할 수 없다.
-조건식은 반드시 비교식으로 작성
변수 선언 스타일에 따른 의도가 존재
var 키워드
[SYNTAX]
var 변수 타입 = 값(표현식)
-값의 타입이 예상가능하면 타입 생략 가능
-값을 생략하면 타입의 제로 값이 대입
-같은 타입의 여러 변수 또는 다른 타입의 여러 변수 동시 선언 가능
-여러 변수의 제로 값 동시 선언 가능
다양한 변수를 한 번에 선언
-선언리스트를 괄호에 묶어서
:= 짧은 선언
-var 키워드 (X)
-타입(x)
-함수 밖에서는 사용 불가 = package 레벨에서 사용 불가