본문 바로가기

Language/Go

(7)
[기초] Go 기초 정리 - 5 (Interface) Tour of Go를 기반으로한 Go의 기본 내용입니다. Interface Interface는 메소드의 시그니쳐 집합으로 정의된다. 인터페이스 유형의 값은 해당 인터페이스의 메소드를 모두 구현하는 타입이라면 어떤 유형이든 가질 수 있음. package main import ( "fmt" "math" ) type Abser interface { Abs() float64 } func main() { var a Abser f := MyFloat(-math.Sqrt2) v := Vertex{3, 4} a = f // a MyFloat implements Abser a = &v // a *Vertex implements Abser // In the following line, v is a Vertex (not *..
[기초] Go 기초 정리 - 4 (Method) Tour of Go를 기반으로한 Go의 기본 내용입니다. Methods 기본적으로 Go언어는 클래스를 가지지 않음. 하지만 비슷하게 타입의 메서드를 정의할 수 있다. 메서드는 특별한 receiver인자가 있는 함수인데, func 키워드와 메서드 이름 사이에 위치하고 있다. package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } //Vertex 구조체 타입에 Abs 메서드 func (v Vertex) Abs() float64 { //func와 함수명 사이에 리시버가 위치하고있다. return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v := Vertex{3, 4} fmt.Println(v.Ab..
구조체를 포함하는 구조체 구조체는 구조체의 필드로 다른 구조체를 포함하는 방법이 있다. type User struct { Name string ID string Age int } type VIPUser struct { UserInfo User //구조체를 포함하는 구조체 필드 VIPLevel int Price int } User는 일반 고객의 정보를 나타내고, VIPUser는 일반고객의 정보에 VIPLevel과 Price정보까지 포함한다. 따라서 위 struct와 같이 "다른 구조체를 포함하는 구조체"형태로 작성될 수 있다. 이와 같이 작성하게 되면 VIPUser에 별도로 Name, ID, Age 필드를 작성할 필요없이 UserInfo를 이용하면 된다. package main import "fmt" type User struct..
[기초] Go 기초 정리 - 3 (Pointer, Struct, Array, Slice, Range, Map, Function value, Function Closure) Tour of Go를 기반으로한 Go의 기본 내용입니다. Pointers 포인터는 값의 메모리 주소를 가지고 있다. *T 타입은 T값을 가리키는 포인터이고 Zero value는 nil. var p *int //p는 int값을 가리키는 포인터 & 연산자는 해당 변수의 포인터(주소)를 생성. i := 42 //int 타입 변수 i p = &i //int 포인터 변수 p * 연산자는 포인터가 가리키는 주소의 값. C언어와는 다르게, Go에서는 포인터 산술을 지원하지 않음. fmt.Println(*p) // 포인터 p를 통해 i 읽기 *p = 21 // 포인터 p를 통해 i에 값을 assign Structs (구조체) 구조체는 필드의 집합체. package main import "fmt" //struct 이름 ..
[기초] Slice의 사용과 내부 작동 방식 처음 Go언어의 Array와 Slice를 접했을 때, C에서 생각하던 개념과 다르다는 것을 확인할 수 있었다. Go에서는 Array와 Slice를 어떻게 구성하고 있는지 이해해보도록 하자. Arrays array는 기본적으로 변수의 이름, array의 크기와 array를 구성하는 요소의 type을 정의를 통해 확인할 수 있다. var arr [4]int // arr 변수이름, 배열의 크기, element type 기본적으로 array는 초기화를 별도로 해줄 필요는 없고, zero value로 알아서 채워주게 된다. var arr [4]int if arr[0] == 0 { fmt.Println("이미 난 초기화가 되어있어") } Go의 array는 값(value)이며, array의 변수는 배열 전체를 가리..
[기초] Go 기초 정리 - 2 (For, If, Switch, Defer) Tour of Go를 기반으로한 Go의 기본 내용입니다. For Go는 for라는 단 하나의 반복 구조를 가짐. for 반복문은 ;로 구분되는 세 가지 구성 요소를 가짐 초기화 구문 : 첫 번째 iteration 전에 수행. 조건 표현 : 매 모든 iteration 이전에 판별. 사후 구문 : 매 iteration 마지막에 수행. 초기화 구문은 주로 :=를 이용한 변수 선언이고, for 스코프 내에서만 유효하다. 반복문은 조건 판별이 false일 경우, 종료될 것. C, Java, Javascript와 같은 언어들과 달리, Go는 for의 세가지 구성 요소를 감싸는 괄호는 없고, { }괄호가 항상 필수. package main import "fmt" func main() { sum := 0 for i :..
[기초] Go 기초 정리 - 1 (import, 함수, 변수, 상수, 자료형) Tour of Go를 기반으로한 Go의 기본 내용입니다. Import 한줄씩 써도되고, 하나로 묶을 수도 있다.(factored import) package main import ( "fmt" "math" ) func main() { fmt.Printf("Now you have %g problems.\n", math.Sqrt(7)) } 함수 param에서 변수 이름 뒤에 type이 온다. (Go 선언 Syntax 관련 번역) package main import "fmt" func add(x int, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) } 두 개 이상의 연속된 이름이 주어진 함수 매개변수가 같은 type일 때. func a..