디스커버리 Go 언어 도서를 읽고 배운 내용을 정리했다.
나는 원래 자바, 객체지향을 공부하던 사람인데.. 완전 다른 패러다임과 목표, 가치를 지향하는 언어를 공부하자니 좀 막막하다. 그래도.. 재밌어 보이니... 잘 공부해야지...
Package main
→ import
→ func main()
main
패키지의 main
함수에서 프로그램을 시작한다.+) GoModule을 통해 GOPATH
와 independent하게 프로젝트 빌드하기
모듈 전역에 정의된 자료형, 변수, 상수, 함수 모두 접근제어자를 명시할 필요 없이, 식별자 이름의 첫 글자가 대문자면 public
, 소문자면 module-private
이다. 모듈은 여러 파일로 구성될 수 있다.
bool
string
byte
// alias for uint8rune
// alias for int32 (Unicode code point)int
int8
int16
int32
int64
uint
uint8
uint16
uint32
uint64
uintptr
float32
float64
complex64
complex128
string
[]byte
로 변환하면 조작이 가능하고, 인덱스로 해당 위치의 바이트 값을 가져올 수 있다.b := []byte("가나다")
b[2]++
fmt.Println(string(b)) // 각나다
+
연산으로 이을 수 있다. 물론 불변이기 때문에 새로운 위치에 바이트 배열이 할당된다.0
for numeric typesfalse
for boolean type""
(empty string) for strings변수 선언 시 변수명 자료형 값
순서로 명시한다.
정적 자료형
var x1 int // variable x1 is int
var x2 *int // variable x2 is pointer to int
var x3 [5]int // variable x3 is 5 array of int
var x4 [5]*int // variable x4 is 5 array of pointer to int
var x5 *[5]int // variable x5 is pointer to 5 araray of int
x := 10
p := &x
func 함수명(파라미터) 반환값
func function(n int) int
첫 글자가 대문자면 public, 소문자면 package-private이다.
반복문
for i := 1; i <= 100; i++ {
// ...
}
for index, element := range collection {
// ...
}
if k == 1 {
// ...
}
if val := i * 2; val < max {
// ...
}
;
)도 생략한다. 구문 분석기가 소스 코드를 분석하여 문장 끝에 자동으로 붙여준다.while
예약어가 없고 for
하나로 다 표현 가능하다.어쩌구_test.go
Example...()
func Example...() {
fmt.Println(something)
// Output:
// expected values
}