[ go ] go에만 있는 문법
in BackEnd
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}
이런식은 안된다는 것이다.❌