요즘 세간의 화제인 chatGTP로 놀아보다가
얘가 코딩도 해준다는 이야기를 듣고 GO로 만들 수 있는 프로그램을 추천해 주라고 시켜봤더니
Go (Golang)을 사용하여 만들 수 있는 프로젝트의 예는 다음과 같습니다:
- RESTful API: Go에서 HTTP 통신을 처리할 수 있는 라이브러리를 사용하여 RESTful API를 만들 수 있습니다.
- Web 크롤러: Go에서 HTTP 통신을 처리할 수 있는 라이브러리를 사용하여 웹 페이지에서 데이터를 수집할 수 있습니다.
- 채팅 어플리케이션: Go에서 제공하는 네트워크 프로그래밍 라이브러리를 사용하여 채팅 어플리케이션을 만들 수 있습니다.
- 데이터베이스 프로그램: Go에서 제공하는 SQL 라이브러리를 사용하여 데이터베이스 프로그램을 만들 수 있습니다.
- 비동기 처리 프로그램: Go에서 제공하는 Goroutine과 Channel 기능을 사용하여 비동기 처리 프로그램을 만들 수 있습니다.
이외에도 다양한 프로젝트를 Go로 만들 수 있습니다. 개
이렇게 추천해 주었다.
WEB크롤러가 재미있어 보여서 웹 크롤러 만들어 달라고 했더니
Go언어를 사용하여 웹 크롤러를 만드는 것은 매우 쉽습니다. 아래는 간단한 웹 크롤러 예제입니다.
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://www.example.com"
response, err := http.Get(url)
if err != nil {
fmt.Printf("The HTTP request failed with error %s\n", err)
} else {
data, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(data))
}
}
위의 코드에서 http.Get 함수를 사용하여 URL에 대한 HTTP GET 요청을 보내고, ioutil.ReadAll 함수를 사용하여 응답 본문의 내용을 읽습니다.
이 코드를 실행하면 웹 페이지의 HTML 내용이 표시됩니다. 그러나, 이것은 간단한 웹 크롤러일 뿐이며, 웹 페이지에서 데이터를 정확하게 추출하는 것은 더욱 복잡할 수 있습니다.
와 레게노
코드를 짜는것 뿐만 아니라 흐름을 읽고 해석까지 해주었다.
여기서
http.Get함수와 ioutil.ReadAll
함수가 뭔지 궁굼하기 때문에 쳇 gtp에 질문해 보자
1.http.Get
Go 언어에서 "net/http" 패키지에서 "Get" 함수는 URL의 자원을 HTTP GET 요청으로 얻는 기능을 제공합니다.
"Get" 함수의 사용 방법:
resp, err := http.Get(url)
- url: 요청할 URL
- resp: HTTP 응답
- err: 요청에 대한 에러 (성공하면 nil)
2.ioutil.ReadAll
ioutil.ReadAll 함수는 Go의 io/ioutil 패키지에서 제공하는 함수로, 특정 io.Reader 구조체를 전부 읽어서 바이트 슬라이스에 저장할 수 있는 기능을 제공합니다.
함수 형식:
인자로 전달하는 r은 읽을 대상이 되는 io.Reader 구조체입니다. ReadAll 함수는 전달받은 r에서 더 이상 읽을 데이터가 없을 때까지 모든 데이터를 읽어서 []byte 형식의 바이트 슬라이스에 저장합니다.
함수 실행 과정에서 오류가 발생하면 error 값을 반환합니다.
하지만 여기서 AI의 작은 실수 한가지
2021년 초 GO.1.16버전 부터
메소드 사용에 혼동이 있어 "io/ioutil" 페키지는 권장되지 않게 되었다.
ioutill 페키지의 메소드 들은
ioutil.Discard => io.Discard
ioutil.NopCloser => io.NopCloser
ioutil.ReadAll => io.ReadAll
ioutil.ReadDir => os.ReadDir (주의 : fs.FileInfo 슬라이스가 아닌 os.DirEntry의 슬라이스가 반환된다.)
ioutil.ReadFile => os.ReadFile
ioutil.TempDir => os.MkdirTemp
ioutil.TempFile => os.CreateTemp
ioutil.WriteFile => os.WriteFile
이처럼 사용방식이 바뀌었다.
위 코드의
ioutil.ReadAll => io.ReadAll
로 바꿔주고 나니 실행이 정상적으로 작동되었다.
'go 학습' 카테고리의 다른 글
go 기초학습4(페키지 export, 생성자, 메소드 , error) (0) | 2023.01.09 |
---|---|
go 기초 학습3 (pointer, array, slice, map, sturct) (0) | 2023.01.05 |
go 기초 학습2 (함수, for, if, switch) (0) | 2023.01.05 |
go 언어 기초1(설치, 상수와 변수, 함수) (0) | 2023.01.02 |