Go 설치
다운로드 클릭 후 os에 맞는 패키지 설치.
C:\Users\r2com>go version
go version go1.18.2 windows/amd64
Go 작업공간
*GoPATH 환경 변수
*작업 공간의 기본 디렉터리 (GO PATH=);
$HOME/go
%USERPROFILE%\go
C:\Users\r2com>setx path "%path%;%GOPATH%\bin"
기존 path 에 path추가 =>"%path%;이게 있어야 추가임. 없으면 대체되므로 조심하기.
C:\Users\r2com>set gopath
GOPATH=C:\Users\r2com\go
cf.)셸이란?
*%GOPATH%\bin
%GOPATH%\src
go 명령어
C:\Users\r2com>notepad hello.go
package main
import "fmt"
func main() {
fmt.Println("hello, world!")
}
C:\Users\r2com>go run hello.go
hello, world!
#큰따옴표 써야함. 작은따옴표 혼용하지 않음.
#fmt; formatting
#대소문자 구분해줘야함
C:\Users\r2com>go run hello.go
# command-line-arguments
.\hello.go:6:9: undefined: fmt.println
=> fmt.println (p를 소문자로 작성하여 발생한 오류.)
C:\Users\r2com>go build hello.go
C:\Users\r2com>dir hello.*
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 8E5C-804C
C:\Users\r2com 디렉터리
2022-05-16 오전 10:37 1,892,352 hello.exe
2022-05-16 오전 10:34 82 hello.go
2개 파일 1,892,434 바이트
0개 디렉터리 9,834,074,112 바이트 남음
C:\Users\r2com>go build -o hello_world.exe hello.go
C:\Users\r2com>hello_world
hello, world!
C:\Users\r2com>go install github.com/rakyll/hey@latest
C:\Users\r2com>hey https://www.golang.org
go gmt
C:\Users\r2com>go fmt hello.go
C:\Users\r2com>notepad hello.go
goimports
=>import 문 정리
=>enhanced go fmt
=>go install 명령으로 설치 필요 (p.28 참조)
C:\Users\r2com>go install golang.org/x/tools/cmd/goimports@latest
goimports -l -w .
세미콜론 삽입 규칙
package main
import "fmt"
func main()
{
fmt.Println("hello, world!")
}
C:\Users\r2com>go fmt hello.go
hello.go:6:1: unexpected semicolon or newline before {
exit status 2
=>고치진 못해도 알려는 줌.
C:\Users\r2com>go run hello.go
# command-line-arguments
.\hello.go:6:1: syntax error: unexpected semicolon or newline before {
Effective Go
Go 위키의 코드 리뷰 규칙
linter
VSC
https://docs.microsoft.com/ko-kr/azure/developer/go/configure-visual-studio-code
이외 dlv, go for VSC 등 확장 설치 필요
Go playground
Makefiles(텍스트 파일)
*make 프로그램 필요
go1.15.6 env
기본 데이터 타입과 선언
내장타입
https://go101.org/
https://go101.org/article/basic-types-and-value-literals.html
1) 불리언
2) 숫자
3) 문자열
4) 별칭:byte(uint8), rune(int32)
제로 값
선언되었으나 값이 할당되지 않은 변수에 기본 값 제로(0) 할당
리터럴
코드에 작성하는 값 그 자체
정수 리터럴
부동 소수점 리터럴
룬 리터럴
문자 리터럴
다른 타입으로 선언된 두 정수는 연산 불가능
package main
import "fmt"
func main() {
fmt.Println("Hello. world!")
var x int8 = 0
var y int16 = 1
fmt.Println(x + y)
}
불리언
숫자 타입
정수 타입
특수 정수 타입들
정수 연산자
부동소수 타입
복소수 타입
문자열과 룬 맛보기
문자열
룬
명시적 타입 변환
cf.) Explicit vs. Implicit
명시적 vs. 암시적(암묵적)
⇒ Manual vs. Automatic
->둘 다 숫자인데도 x+y 밑줄.
->타입변환해주면 밑줄(오류)없어짐
var vs. :=
변수 선언 스타일에 따른 의도가 존재
var 키워드
[SYNTAX]
var 변수 타입 = 값(표현식)
다양한 변수를 한 번에 선언
var 다시 사용 x , 재할당시 x = 30 이렇게 할당해 줄 것.
uint로 변수 선언 -> type 출력시 uint로 나옴 . 보통은 int
위에서 정의 된 변수(x,y)라도 새로운 변수(z)와 함께 추가하면 잘 작동함. => z밑줄인 이유는 아래에서 호출 안했기 때문.
const 사용
타입 지정 상수와 타입 미지정 상수
Scale up vs Scale out
scale up ; cpu성능 올리기, 램 1G-> 4G 등
scale out ; 비슷한 성능의 컴퓨터 더 사기.
=>컴퓨터간의 연동이 중요해짐 (이 때 클러스터가 중요)
기타
함수의 인터페이스 ; 함수 헤더
함수는 값, 블랙박스, 코드블럭에 이름 붙인 것
GO는 값을 직접 복사.
(파이썬 - 주소 복사[참조한다])
SQL트랜잭션 - 커피주문하고 받고 거스름돈 받고 이런걸 하나의 단위로 보겠다. -> 원자적 연산
앞에 했던 여러 작업이 있더라도 하나라도 잘못되면 다시해야 함. 모든 작업이 완전히 잘 끝나야 완성된다. 하나라도 잘못되면 안됨. ex)계좌이체
이렇게 과정을 하나로 묶는 것을 원자적 단위. 원자적 연산.
인터페이스 ; 접근을 위한 모든 건 연결?사이간 얼굴.
Go는 변수를 만들었으면 반드시 써야한다.
package main
import "fmt"
func main() {
one := 1
fmt.Println("hello, world!")
}
C:\Users\r2com>go run hello.go
# command-line-arguments
.\hello.go:6:2: one declared but not used
명령프롬프트에서 드라이브 바꾸기
C:\Users\r2com>cd d:\go
C:\Users\r2com>d:
d:\go>
보수(complement)
n진법 : n의 보수 => n-1의 보수 +1,
n-1의 보수 => 각 자리의 보수를 n-1에서 뺸 것