GO언어 입문 #4

학미새🐥·2022년 2월 23일
1
post-custom-banner

배열

  • 자료구조의 일종 (데이터를 어떤형태로 저장할지 나타내는 구조)
  • 같은 타입의 데이터들로 이루어짐
  • 배열 선언 시 개수는 항상 상수

선언 방법

var 변수명 [요소 수]타입

ex) var t [5]float64

//선언과 동시에 초기화
var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2}

다양한 배열 변수 선언

  • var nums [5]int : 각 타입의 기본값(정수는 0)으로 채워짐
  • days := [3]string{"mon","tue","wed"}
  • var temps [5]float64 = [5]float64{24.3, 26.7} : 지정한 값으로 요소가 채워지고 남는 요소는 기본값으로 채워짐
  • var s = [5]int{1:10, 3:30} : index:값 의 형태로 특정 인덱스에 값을 채워넣고 남는 요소는 기본값으로 채워짐 (ex-0, 10, 0, 30, 0)
  • x := [...]int{10, 20, 30} : 길이가 뒤의 초기값 길이만큼 지정(지정된 이후엔 배열의 크기 고정됨. 정적배열)
    x := []int{10, 20, 30}와 다름 : 길이가 늘어날 수 있음. 동적배열

배열 순회

  • len(배열)
func main() {
	nums := [...]int{10, 20, 30, 40, 50} 
    nums[2] = 300
    
    for i:=0; i<len(nums); i++ {   //len(배열명) : 길이를 반환
    	fmt.Println(nums[i])
    }
{
  • range 배열
func main() {
	var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2}
    
    for i, v := range t {  //range 배열명 : 요소를 순회하면서 (인텍스, 요소값) 반환
    	fmt.Println(i, v)
    }
}
  • range사용 시 주의사항
for i, v  range 배열명 {
	//fmt.Println(v)  -> error. i를 선언했는데 사용하지 않아서. 
    fmt.Println(i, v) // -> 정상 실행
}

💡 인덱스값을 사용하고 싶지 않을땐?

for _, v:= range 배열명 {
	fmt.Println(v)   // -> 정상실행
}

_ : 빈칸지시자 (자리는 표시되지만 사용할 일 없다고 무시함)

( v를 무시하고 싶을 땐 그냥 i만 쓰면 된다. 하지만 i를 무시하고 싶을 때 i를 쓰지 않고 v만 쓰면 v가 첫번째 변수로 취급되어서 v에 인덱스가 들어가게 되기 때문에 빈칸지시자가 필요한 것)

배열 복사

func main() {
	a := [5]int{1, 2, 3, 4, 5}
    b := [5]int{500, 400, 300, 200, 100}
    
    for i,v := range a {
    	fmt.Printf("a[%d] = %d\n", i, v)
    }
    /*
    a[0] = 1
    a[1] = 2
    a[2] = 3
    a[3] = 4
    a[4] = 5
    */
    
    fmt.Println()
    for i,v := range b {
    	fmt.Printf("b[%d] = %d\n", i, v)
    }
     /*
    b[0] = 500
    b[1] = 400
    b[2] = 300
    b[3] = 200
    b[4] = 100
    */
    
    b = a   // a배열이 b배열로 복사됨
    
    fmt.Println()
    for i,v := range b {
    	fmt.Printf("b[%d] = %d\n", i, v)
    }
    /*
    b[0] = 1
    b[1] = 2
    b[2] = 3
    b[3] = 4
    b[4] = 5
    */
    
  • GOLang에서 중요한 것 : 값의 크기와 공간의 크기가 무조건 같아야함!
    a와 b 배열의 크기가 다르면 b = a 불가함. 에러발생.

다중 배열

  • 이중 배열 순회
func main() {
	// 이중배열 초기화는 이중 중괄호, 각 요소는 콤마 구분
	a := [2][5]int{
    		{1, 2, 3, 4, 5},
            {5, 6, 7, 8, 9},  
    //중괄호를 다음 줄에서 닫는 경우 마지막 요소 후에도 콤마를 찍어야함
    }
    
    //이중배열은 이중for문을 활용하여 순회한다
    for _, arr := range a {
    	for _, v := range arr {
        	fmt.Print(v, " ")
        }
        fmt.Println()
    }
}

// 1 2 3 4 5 
// 5 6 7 8 9 
profile
뭐든 다해보려는 공대생입니다
post-custom-banner

0개의 댓글