Go 언어 시작기 #3

ims·2021년 5월 22일
0

GO 언어 시작기

목록 보기
3/4
post-custom-banner

📌 1. Dictionary

🔥 type

struct 뿐만 아니라, dictionary도 type으로 사용할 수 있다.


📌 예제

🔥 Add

search에서 err를 return 한다면 값이 없다는 이야기니까, 값을 넣을 수 있다.
만약 err가 nil 이라면 값이 있다는 이야기이므로 err를 return 해야한다.

🔥 Update

위와 같이 var을 묶어서 선언할 수 있다.

🔥 Delete

📌2. hitURL

hit = 웹 서버의 파일 1개에 접속하는 것을 의미

🔥 make() or {}

var result = make(map[string]string)
var result = map[string]string{}

위의 예에서 위와 아래의 코드는 동일하다.
make()는 map함수를 empty값으로 로 초기화 시켜준다. 초기화를 시키지 않을 시 map은 nil이 돼버린다. map이 된 nil에는 어떤 값도 넣을 수 없다.

var result = map[string]string
result["안녕"] = "얼쑤"

만약 위와 같이 초기화(empty 상태)를 하지 않고 값을 넣으려고 하면
컴파일러에는 걸리지 않지만 error를 반환하게 된다.

🔥 Code

package main

import (
	"errors"
	"fmt"
	"net/http"
)

var errRequestFailed = errors.New("리퀘스트 실패")

func main() {
	var results = make(map[string]string)
	urls := []string{
		"https://www.google.com",
		"https://www.naver.com",
		"https://www.facebook.com",
		"https://www.instagram.com",
		"https://www.airbnb.com",
		"https://www.amazon.com",
		"https://soundcloud.com",
	}

	for _, url := range urls{
		result := "Ok"
		err := hitURL(url)
		if err!=nil{
			result ="FAILED"
		}
		results[url] = result
	}
	for url,result := range results{
		fmt.Println(url,result)
	}
}

func hitURL(url string) error{
	fmt.Println("Checking " + url)
	resp,err := http.Get(url)
	if err!=nil || resp.StatusCode >=400{
		fmt.Println(err,resp.StatusCode)
		return errRequestFailed
	}
	return nil
}

🔥 Code 해석

  1. urls 들을 선언하고, hitURL 함수에서 하나의 url 요청이 있을 때 마다 print하고 http.Get을 통해 url을 방문(hit)한다.
resp.StatusCode >= 400

위와 같이 statusCode가 400이상이면 에러다! 라고 조건문을 체크하는것은 GO의 신기한 점이다.

  1. 성공적으로 방문했다면 map에 OK를 담고, 아니라면 FAILED를 담는다. 성공과 실패는 err가 nil인지 아닌지를 보고 판단할 수 있다.

  2. 결과

그러나 이렇게 동기적으로 실행하는 것은 파이썬이나 JS에서 주로 돌아가는 방식인데, 비효율적이다.

GO에서는 비동기적으로 더 빠르게 처리할 수 있다.

profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/
post-custom-banner

0개의 댓글