내가 알아야할 go 기본 정리편

Olivia·2024년 1월 18일
0

[Go]

목록 보기
2/4
post-thumbnail

함수 처리

output, err := utils.ExecuteCommandLine(kubectlCommand)
  • Go 언어에서 함수여러 값 반환할 수 있다.
    utils.ExecuteCommandLine함수는 외부 명령을 실행하고 두 가지 정보를 반환한다.
    1. 명령 실행 결과를 담은 output변수
      만약, 명령 실행이 성공적으로 이루어진다면, output 변수는 명령 실행 결과가 저장
      err 변수에는 nil이 저장된다.
    2. 실행 중 발생한 에러를 담은 err 변수
      명령 실행 중 문제가 발생하면, output변수는 비어있고, err 변수에는 발생한 에러 정보가 저장된다.

nil

Nil은 Go 언어에서 특별한 값을 나타내는 예약어.
"없음" 또는 "무효"를 나타낸다. 주로 다양한 타입의 변수들이 가질 수 있는 기본 값 중 하나다.

  1. 포인터 변수 초기값

    var ptr *int
    fmt.Println(ptr) // null

    포인터 변수를 선언할 때 초기화되지 않을 경우, 자동으로 nil로 초기화된다.

  2. 슬라이스, 맵, 채널의 초기값

    var slice []int
    fmt.Println(slice) // nil
    
    var m map[string]int
    fmt.Println(m) // nil
    
    var ch chan int
    fmt.Println(ch) // nil
  3. 인터페이스 변수 초기화

    var myInterface interface{}
    fmt.Println(myInterface) // nill

    만약, 코드에서 err 변수에 nil이 할당된다면, 에러가 발생하지 않았음을 의미한다.


"go.mongodb.org/mongo-driver/bson"

bson은 MongoDB에서 사용되는 데이터 형식 중 하나로, JSON과 비슷하지만, 조금 더 효율적인 바이너리 형식.
BSON과 Go 데이터 타입 간의 변환을 도와주는 패키지다.
예를 들어, Go언어의 구조체를 BSON으로 변환하거나, 반대로 BSON 데이터를 Go로 변환하는 작업에 사용한다.
이를 통해 MongoDB와 Go언어 간의 데이터 교환을 쉽게 할 수 있다.

type Person struct {
	 Name string `bson:"name"`
    Age  int    `bson:"age"`
}
  • bson:"name"bson:"age"은 해당 필드가 BSON으로 저장될 때의 이름을 지정하는 것

"go.mongodb.org/mongo-driver/mongo/options"

options패키지는 Go언어에서 MongoDB와 같은 데이터베이스와 상호작용할 때 사용되는 설정을 다루는 도구다.
Find 메서드를 사용하려고할때 사용한 패키지다.
예를 들어 options.Find()를 호출하면, Find메서드에 전달할 다양한 설정(옵션)을 만들 수 있다.

opts := options.Find().setSort(bson.D{{"yaml.metadata.creationTime", -1}})

위의 코드의 경우, Find 메서드를 사용할 때, setSort를 이용해서 정렬 옵션을 사용하고 있다.
이렇게 데이터를 원하는 방식으로 검색하거나 정렬할 수 있도록 다양한 옵션을 줄 수 있는 패키지다.


Timestamp가 map으로 정의된 이유

timestamp 필드가 map[string]string으로 정의된 것은 여러 가지 시간 정보를 표현할 수 있기 때문.
Map은 여러 key-value로 이루어질 수 있어 다양한 타입의 데이터를 저장할 수 있다.

Timestamp: map[string]string{
	"creationTime": "2024-01-18T12:30:30",
    "updateTime: "2024-01-18T16:23:30",
}

특정 시간에 접근하거나 특정 시간 정보를 추가/수정/삭제하기 쉽다.


Context

Go에서 Context는 여러 루틴 간의 데이터를 안전하게 공유하고 통신할 수 있도록 한다.

값 전달

context를 사용해서 여러 함수 또는 루틴 간에 값을 전달할 수 있다.
예를 들어, HTTP 요청과 응답 정보를 context를 통해 전달할 수 있다.

취소 신호 및 타임아웃

context는 취소 신호를 보내거나 타임아웃을 설정해서 작업을 중단하거나 제한하는데 사용한다.
예상치 못한 상황이나 장기 실행 작업에 대비할 때 사용한다.

데드라인 설정

context 작업이 완료되어야하는 기한을 설정할 때 사용한다. 작업이 일정 시간 이내에 완료되지 않으면 취소할 수 있다.

컨텍스트 체인

context는 부모와 자식간의 관계를 형성해서 여러 레벨의 컨텍스트를 생성할 수 있다.
이를 통해 상위 수준의 컨텍스트에서 하위 수준의 값 및 설정을 전파할 수 있다.
(react에서 props같은 개념인듯?)


defer

함수가 종료되기 직전에 특정 문장을 지연 실행하도록 하는 키워드다.
defer 키워드가 포함되어있는 경우, defer가 해당 함수의 맨 첫 부분에 입력되었다고 하더라도
해당 함수의 종료 직전, 즉 가장 마지막에 실행된다.


for문

package main

import "fmt"

func main(){
	var nums = []int{1, 2, 3, 4, 5}
	for i, value := range nums {
		fmt.Println(i, value)
	}
}

i는 index, value는 값을 말한다.
여기서 range가 뭘까?

```
range
Go에서 range는 
```

cur

cur은 MogoDB 데이터를 조회하는 데 사용되는 커서다.

profile
👩🏻‍💻

0개의 댓글