[ go ] go에만 있는 문법


Array

func main(){
	names := [5]string{"a","b","c","d","e"}
}

Go에서 배열을 만들고 싶다면 위 코드처럼 만들면 된다.

만들려고 하는 배열의 길이를 적어주고 string을 적어준뒤 배열안에 들어갈 값을 명시해준다.

그런데 가끔은(이라고 읽고 사실은 거의 길이제한 없이 사용할때가 더 많으니) 배열의 길이를 정하지 않고 생성해야할때가 있는데

이때 slice 를 사용하면 된다

Slice

func main(){
	names := []string{"A","B","C"}
	names = append(names, "D")
	fmt.Println(names)	//[A B C D]
}

이렇게 배열의 길이를 적지않고 적어주면 slice로 사용하는 거다.

이런 배열에 값을 추가할때는 append 를 사용하는데 JS의 push개념과 비슷하다.

하지만 차이점이라면 push는 하는 순간 array에 반영이 되지만 append는 반영이 아니라 return을 해준다.

그래서 배열 = append(하나의slice, "값") 으로 작성할 수 있다.

Maps

JS의 object와 약간 비슷한 개념이지만 완전히 비슷하지는 않다

func main(){
	sora := map[string]string{"name":"sora","age":"32"}
	fmt.Print(sora)	//map[age:32 name:sora]
}

map[string]string 여기서 [] 대괄호 안의 타입은 key의 타입이고, 뒤의 타입은 value의 타입이다

map도 아래 코드처럼 for문을 돌릴 수 있다.

func main(){
	sora := map[string]string{"name":"sora","age":"32"}
	for key, value := range nico {
    fmt.Println(key, value)
  }
}

그런데 만약

sora := map[string]string{"name":"sora","age":"32"} 에 32를 string말고 int를 쓰고 싶다면 어떻게 할까?

그럴 때는 structs를 사용하면 된다.

Structs

map보다 좀 더 유연하다. struct는 struncture에서 따왔다.

func main(){
	{
		"name":"sora",
		"age":32,
		"favFood":["ramen"]
	}
}

이런식으로 작성할 수 있는데

struct의 타입을 아래 코드처럼 지정해주어야 한다.

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

func main(){
	favFood := []string{"ramen","food"}
	sora := person{"sora",32, favFood}
	fmt.Println(nico)
}

그렇지만 sora := person{"sora",32, favFood} 같이 코드가 value만 적혀있으면 struct을 찾아서 또 위로가고 뭐 어쩌고 저쩌고 해야하기때문에

sora := person{name:"sora",age:32, favFood:favFood} 이런식으로 작성해줄 수 있다.

하지만 어떤건 key를 적고 어떤건 안적고 그러면 안된다.

❌ 그러니까.. sora := person{name:"sora",32,favFood} 이런식은 안된다는 것이다.❌




© 2018. by sora

Powered by sora