Go 데이터 유형, 구조체, 슬라이스

지난 기사에서 우리는 Go의 매우 기본적인 구조 중 일부를 살펴보았습니다. 여기서는 기본 데이터 유형과 Go에서 사용할 수 있는 몇 가지 집계된 데이터 구조를 살펴보겠습니다.

Go의 기본 유형



다음은 Go의 기본 유형 중 일부입니다. Go는 값이 0입니다. 즉, 선언되는 변수에 아무것도 초기화되지 않으면 기본값을 할당합니다. 다음은 몇 가지 유형의 목록입니다.


유형
가치
0 값
샘플 값


부울
첫 번째 반복 전
거짓
진실


모든 반복 전에
""
"테스트"

정수
32비트 또는 64비트 정수
0
25

단위
32비트 또는 64비트 부호 없는 정수
0
5

float32
IEEE-754 32비트 부동 소수점 숫자
0
1.3242

컴플렉스64
float32 실수 및 허수 부분이 있는 복소수
(0+0i)
(2+3i)


나는 모든 다른 유형을 선언하고 사용하여 0 값을 확인하고 초기화도 시도했습니다.

package main

import "fmt"

func main() {
    var bZeroValue bool
    var b bool = true
    var sZeroValue string
    var s string = "test" 
    var iZeroValue int
    var i int = -5
    var uZeroValue uint
    var u uint = 5
    var fZeroValue float32
    var f float32 = 3.14
    var cZeroValue complex64
    var c complex64 = (3 + 4i) 
    fmt.Printf("Type: %T Value: %v\n", bZeroValue, bZeroValue)
    fmt.Printf("Type: %T Value: %v\n", b, b)
    fmt.Printf("Type: %T Value: %v\n", sZeroValue, sZeroValue)
    fmt.Printf("Type: %T Value: %v\n", s, s)
    fmt.Printf("Type: %T Value: %v\n", iZeroValue, iZeroValue)
    fmt.Printf("Type: %T Value: %v\n", i, i)
    fmt.Printf("Type: %T Value: %v\n", uZeroValue, uZeroValue)
    fmt.Printf("Type: %T Value: %v\n", u, u)
    fmt.Printf("Type: %T Value: %v\n", fZeroValue, fZeroValue)
    fmt.Printf("Type: %T Value: %v\n", f, f)
    fmt.Printf("Type: %T Value: %v\n", cZeroValue, cZeroValue)
    fmt.Printf("Type: %T Value: %v\n", c, c)
}


출력은 0 값과 각 값이 초기화되고 사용되는 방법을 보여줍니다.

Type: bool Value: false
Type: bool Value: true
Type: string Value: 
Type: string Value: test
Type: int Value: 0
Type: int Value: -5
Type: uint Value: 0
Type: uint Value: 5
Type: float32 Value: 0
Type: float32 Value: 3.14
Type: complex64 Value: (0+0i)
Type: complex64 Value: (3+4i)


이동 포인터



Go에도 포인터가 있습니다. C 또는 C++와 동일한 메모리 주소를 보유합니다. 유형 T는 유형 T의 포인터입니다. 포인터의 0 값은 nil입니다. *& 연산자**를 사용하여 포인터를 생성합니다.

i := 5
var p *int = &i


를 사용하여 포인터에서 값에 액세스할 수 있습니다. 이를 **역참조*라고 합니다.

fmt.Println(*p)


Go 구조체



구조체는 C와 유사하며 유형이 지정된 필드 모음을 형성하는 데 사용됩니다. 일반적으로 OOPS 용어로 생각하는 경우 개체의 상태를 모델링하고 유지 관리하는 데 사용할 수 있습니다.

아래는 짧은 예입니다.

type Anime struct {
    name string
    year int
}

func main(){
    onePiece := Anime("One Piece", 1999)
    fmt.Println(onePiece.name, "was first aired on", onePiece.year)
}


도트 연산자를 사용하여 구조체 필드에 액세스합니다.

배열 이동



Go의 배열은 동일한 유형의 값 모음입니다. 값의 유형과 길이는 선언 후에 변경할 수 없습니다.

nos := [3]int {1, 2, 3}
fmt.Println(nos)


그러나 배열이 포인터인 C 및 C++와 달리 Go에서는 배열이 값입니다. 이 차이의 의미는 2배입니다.
  • 배열을 새 변수에 할당할 때 값을 복사합니다
  • .
  • 함수에 전달할 때 포인터가 아닌 복사본을 전달합니다.

  • 고 슬라이스



    Slice는 모양과 기능이 같지만 훨씬 더 유연합니다. 내장된 추가 기능을 사용하여 확장할 수 있습니다. 또 다른 주요 차이점은 슬라이스가 참조를 사용한다는 것입니다. 또한 모든 Go 함수는 배열이 아닌 슬라이스를 사용합니다.

    슬라이스를 사용하고 추가로 확장하는 간단한 스니펫.

    no := []int{1, 2, 3, 4}
    no = append(no, 5)
    fmt.Println(no)
    


    이것이 Go의 기본 유형을 이해하는 데 도움이 되기를 바랍니다. 몇 가지 예와 함께 향후 기사에서 Slice 및 내부 작업에 대한 자세한 기사를 작성하기를 바랍니다. 다음 기사에서는 작은 프로젝트의 도움으로 Go 루틴을 다룰 것입니다.

    행복한 코딩!

    ❤️를 남기고 댓글을 달아 여러분의 생각을 알려주세요.
    지금까지 읽은 내용이 마음에 드십니까? 내 사이트https://vigneshm.me/posts/go_types/에서 기사를 확인하십시오.

    좋은 웹페이지 즐겨찾기