성장, 그리고 노력

부족하더라도 어제보다 더 잘해지자. 노력은 절대 배신하지 않는다.

go

go lang 기본기 다지기1 - 패키지, 변수와 자료형, 포인터

제이콥(JACOB) 2021. 1. 28. 01:34

워크스페이스에 3개의 폴더를 생성했다. 소스코드를 저장하는 "src", 컴파일된 패키지를 저장하는 "pkg", go의 바이너리를 저장하는 "bin" 폴더이다. 

 

패키지

 패키지 이름은 모든 go 파일의 최상단에 선언한다.
package jacob

 

- go 프로그램은 한 개 이상의 패키지로 구성된다. 각 패키지는 한 개 이상의 go 소스파일을 포함하는 폴더이며, 모든 go 파일은 패키지에 속한다. 패키지 폴더는 워크스페이스의 src 폴더 하위에 위치한다.

 

- 패키지 이름은 소문자로 선언하며, 패키지의 폴더명은 패키지와 이름을 동일하게 지정한다.

 

- import 키워드를 이용해 패키지를 가져올 수 있다.

package jacob
import "fmt"

- 만약 다른 패키지 폴더 안에 존재한다면 아래와 같이 가져온다.

import "math/rand"

- 여러 패키지를 가져올 때는 아래와 같이 작성한다.

import (
	"fmt"
    "math/rand"
)

- go 언어에서는 사용하지 않는 패키지를 가져올 수 없다. 하지만 가져온 패키지를 직접적으로 직접적으로 사용하지 않는 경우도 있는데 그런 경우 해당 패키지 이름 앞에 밑줄(_)을 붙인다.

import (
	"database/sql"
    _ "github.com/go-sql-driver/mysql"
)

- 가장 많이 쓰는 패키지는 main 패키지이다. go 프로그램에서 가장 처음 실행되는 패키지다. 

 

- go 프로그램을 컴파일하려면, main 패키지 경로로 이동하여 아래 명령어를 입력한다.

go install
// or
go build

- go install의 경우 컴파일이 완료되면 바이너리는 워크스페이스의 bin 폴더에 저장되며, go build 명령어는 현재 폴더에 바이너리를 생성한다. 만약 직접 지정하고 싶다면 아래와 같이 명령어를 입력하면 된다.

go build -o ./output/jacob.exe

 

변수와 자료형

- var 키워드를 사용해 변수를 선언한다.

// 단일 string형 변수 선언
var jacob string

// 복수 string형 변수 선언
var jacob1, jacob2 string

- 변수의 초기값 설정

// 자료형 + 초깃값 선언
var v1, v2, v3 string = "v1 string", "v2 string", "v3 string"

// 초깃값 선언
var v1, v2, v3 = "v1 string", "v2 string", "v3 string"

// 다른 자료형과 변수를 초기화
var v1, v2, v3 = "v1 string", 8, 12

// 가장 일반적인 방법
var (
  c = "jacob"
  o = 8
  b = 12
)

- 함수 안에서 변수를 선언하고 초기화할 때는 var 키워드 대신 := 를 사용한다. 이때 변수의 자료형을 추론한다.

c := "jacob"
o := 8
b := 12

- 하지만 var 키워드는 자료형을 명시적으로 지정할 수 있어 유용하다.

 

- 자료형의 경우 아래와 같다.

https://golang.org/ref/spec#Types

- 초깃값이 없는 변수는 자료형에 따라 다른 제로 값(zero value)이 지정된다.

자료형 제로 값
숫자형 0
부울 false
문자형 ""
포인터 nil

 

포인터

- 포인터란, 변수의 메모리 주소를 저장하는 또 다른 변수다. 변수의 값을 복사하지 않고 메모리에 있는 실제 값을 참조할 수 있다.

 

- 포인터는 자료형 앞에 * 연산자를 붙여 선언한다. int형의 포인터는 아래와 같이 선언할 수 있다.

var iptr = *int

- 포인터의 제로 값은 nil이다. nil은 자바의 null과 비슷하며 nil 포인터를 참조하면 에러가 발생한다.

// int형 변수 초기화
var x int = 812

// x의 메모리 주소를 가리ㅣ는 포인터 선언
var xptr = &x

// 역참조
y := *xptr

- & 연산자는 x의 주소를 의미한다. 변수 앞에 & 연산자를 붙이면 행당 변수의 메모리 주소를 반환한다.

 

- 포인터가 가리키는 주소에 저장된 값을 얻는 행위를 역참조(de-referencing)라고 한다.

 

- 포인터가 가리키는 값을 바꿀 때도 다음과 같이 역참조를 사용한다.

*xptr = 12

- go의 포인터의 경우 c와 c++의 포인터와는 달리 포인터 연산을 지원하지 않는다. unsafe 패키지를 사용하면 가능하지만, 추천되는 방법은 아니다.

반응형

'go' 카테고리의 다른 글

go lang 기본기 다지기2 - 함수와 클로저  (0) 2021.01.31