[Go] Go Basics

Jiwoo Kim·2021년 10월 29일
0

Go

목록 보기
1/11
post-thumbnail

Go

디스커버리 Go 언어 도서를 읽고 배운 내용을 정리했다.

나는 원래 자바, 객체지향을 공부하던 사람인데.. 완전 다른 패러다임과 목표, 가치를 지향하는 언어를 공부하자니 좀 막막하다. 그래도.. 재밌어 보이니... 잘 공부해야지...

구조

Package mainimportfunc main()

  • 즉, main 패키지의 main 함수에서 프로그램을 시작한다.

+) GoModule을 통해 GOPATH와 independent하게 프로젝트 빌드하기

공개 및 비공개

모듈 전역에 정의된 자료형, 변수, 상수, 함수 모두 접근제어자를 명시할 필요 없이, 식별자 이름의 첫 글자가 대문자면 public, 소문자면 module-private이다. 모듈은 여러 파일로 구성될 수 있다.

자료형

  • bool
  • string
  • byte // alias for uint8
  • rune // 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))	// 각나다
  • 문자열은 + 연산으로 이을 수 있다. 물론 불변이기 때문에 새로운 위치에 바이트 배열이 할당된다.

Zero value

  • 할당되지 않은 변수의 초깃값
  • 0 for numeric types
  • false 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 {
    // ...
}

핵심은 간결하게

  • 자바는 메서드나 변수명을 지을 때, 코드가 좀 길어지더라도 명확하게 의미와 의도를 드러내는 것을 중시했다.
  • 반면 Go는 약어를 적극 활용하고, 조건문의 괄호를 생략하는 등 최대한 간결한 코드를 중시한다.
  • 세미콜론(;)도 생략한다. 구문 분석기가 소스 코드를 분석하여 문장 끝에 자동으로 붙여준다.
  • while 예약어가 없고 for 하나로 다 표현 가능하다.

테스트

  • 테스트 파일명은 어쩌구_test.go
  • 테스트 메서드명은 Example...()
func Example...() {
    fmt.Println(something)
    // Output:
    // expected values
}

0개의 댓글