go 자료구조

최준호·2022년 10월 31일
0

Go

목록 보기
6/9
post-thumbnail

📗 array

📄 array

package main

import (
	"fmt"
)

func main() {
	names := [5]string{"juno", "juno2", "juno3"}
	fmt.Println(names)
}

go에서 array는 다음과 같이 선언하고 사용할 수 있다.

그리고 다음과 같이 비어있는 값은

package main

import (
	"fmt"
)

func main() {
	names := [5]string{"juno", "juno2", "juno3"}
	names[3] = "juno4"
	names[4] = "juno5"
	fmt.Println(names)
}

다음과 같이 채울 수 있다. 그럼 이 후의 값을 채우면 어떻게 될까?

package main

import (
	"fmt"
)

func main() {
	names := [5]string{"juno", "juno2", "juno3"}
	names[3] = "juno4"
	names[4] = "juno5"
	names[5] = "juno6"
	fmt.Println(names)
}

다른 언어와 동일하게 out of bound가 터지며 코드기 실행되지 않는다.

이를 쉽게 지원하기 위해 go에는 slice가 있다!

📗 Slice

📄 사용방법

package main

import (
	"fmt"
)

func main() {
	names := []string{"juno", "juno2", "juno3"}

	fmt.Println(names)
}

사용방법은 간단하다 length 부분을 비워주면 자동으로 slice로 사용되어진다.

📄 append

값을 추가하기 위해서는 append를 사용할 수 있다.

package main

import (
	"fmt"
)

func main() {
	names := []string{"juno", "juno2", "juno3"}
	append(names, "juno4")
	fmt.Println(names)
}

append() 함수는 다음과 같이 slice와 value를 넣어주면 된다.

그런데 append를 해도 vscode에서 빨간 밑줄이 그어져있다. 왜일까? append는 names의 slice에 juno4라는 값을 추가해서 수정해주는 것이 아닌 해당 slice을 복사하여 juno4를 추가해준 slice를 반환하기 때문이다. 그래서 코드를 정상적으로 실행하기 위해서는

package main

import (
	"fmt"
)

func main() {
	names := []string{"juno", "juno2", "juno3"}
	names = append(names, "juno4")
	fmt.Println(names)
}

다음과 같이 작성하면 된다.

추가는 append로 쉽게 할 수 있으나 remove는 따로 없다.

📗 map

📄 사용 방법

package main

import (
	"fmt"
)

func main() {
	names := map[string]string{"key": "value", "key2": "value2", "key3": "value3"}

	fmt.Println(names)
}

map은 다음과 같이 map[key]value 의 type을 지정해서 선언해서 사용할 수 있다.

값도 다음과 같이 확인해볼 수 있다.

📄 for문으로 돌려서 데이터 뽑기

java에서 iterator처럼 사용할 수 있는데 (= or key값을 뽑아서 while문 돌리듯이)

package main

import (
	"fmt"
)

func main() {
	names := map[string]string{"key": "value", "key2": "value2", "key3": "value3"}
	for key, value := range names {
		fmt.Println(key, value)
	}
}

앞서 배운 range를 사용하여 값을 모두 순회하여 뽑아낼 수 있다.

map에 값을 추가하는 함수가 있지만 여기서는 바로 사용하지 않고 추후에 프로젝트를 통해 같이 학습해보자!

📗 struct

📄 사용 방법

위에서 map으로 데이터를 만들었을 때 go에는 모든 데이터를 string이나 int로 해야하나?라는 생각이 들 수 있다.

예를들어

{
	"name": "juno",
	"age": 20,
	"hoby": ["sing", "golf"]
}

와 같은 데이터는 object에 담아야하는데 go는 object가 없다... 어떻게 이런 데이터 형태를 만들까? 정답은 struct를 통해 데이터를 생성하면 할수 있다.

package main

import (
	"fmt"
)

type person struct {
	name string
	age  int
	hoby []string
}

func main() {
	hoby := []string{"sing", "golf"}
	juno := person{"juno", 20, hoby}
	fmt.Println(juno)
}

struct는 다음과 같이 type 이름 struct로 선언해서 사용할 수 있다. java를 사용해봤다면 class와 거의 동일한 형태이다.

하지만 java와 python, javascript 등과 같은 언어들과 다른점은 go는 생성자가 없다는 것이다. java의 경우 class를 만들어서 사용할 땐 생성자 메서드가 필수로 사용되는데 go는 생성자 없이 struct 자체로 사용하는 느낌이다. 이 다른 점을 확인하고 넘어가자!

선언한 후 사용방법은 person{}으로 생성하여 안에 매개변수 값을 넣어주면 되는데 위 코드와 같이 순서대로 값을 입력하는 방법으로 생성해도 되고

package main

import (
	"fmt"
)

type person struct {
	name string
	age  int
	hoby []string
}

func main() {
	hoby := []string{"sing", "golf"}
	juno := person{name:"juno", age:20, hoby:hoby}
	fmt.Println(juno)
}

매개변수 값을 하나씩 지정해주는 것도 가능하다.

코드를 읽기엔 위 방법이 더 좋은 코드로써 작성할 수 있는 방법이다.

결과는 다음과 같이 확인할 수 있다.

profile
해당 주소로 이전하였습니다. 감사합니다. https://ililil9482.tistory.com

0개의 댓글