| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- channel
- websocket
- todo-list
- SFC
- URL
- map
- 행렬
- method
- Refactoring
- CDN
- Dictionary
- Vue.js
- Server
- go
- container
- cli
- golang
- Vue
- goroutines
- Matrix
- goroutine
- component
- TODO
- localStorage
- App.vue
- PROPS
- reactivity
- toggle
- graceful shutdown
- emit
- Today
- Total
목록go (20)
ksundev 님의 블로그
카테고리로 분류되는 채팅방과 각 채팅방에 접속한 유저들과 채팅으로 소통할 수 있는 앱을 만들어보았습니다.프론트엔드 코드는 이 게시글에 없고, 백엔드 코드만 작성되었습니다.이후 프론트엔드 코드까지 업로드하여 링크 달아놓겠습니다!전체 코드package mainimport ( "fmt" "net/http" "strings" "time" "github.com/gorilla/websocket")type Message struct { Username string `json:"username"` Content string `json:"content"` Room string `json:"room"` Timestamp time.Time `js..
2025.06.26 - [[개발] Go/중급 프로젝트] - [URL Checker] hitURL 그리고 느린 URL Checker (순차적) [URL Checker] hitURL 그리고 느린 URL Checker (순차적)urls := []string{ "https://www.airbnb.com/", "https://www.google.com/", "https://www.amazon.com/", "https://www.reddit.com/", "https://www.google.com/", "https://soundcloud.com/", "https://www.facebook.com/", "https://www.instagram.com/", }위의 유명한ksundev.tistory.com이전 URL Ch..
Channels 2 - chan 타입 바꾸고 반복문 활용하기1. 코드 분석현재 우리가 살펴볼 코드는 문자열 타입 채널과 반복문을 활용한 개선된 예제입니다:package mainimport ( "fmt" "time")func main() { c := make(chan string) people := [4]string{"KSun", "Peter", "John", "Chris"} for _, person := range people { go isReady(person, c) } for i := 0; i 2. 이전 코드와의 차이점2.1 채널 타입 변경// 이전: bool 타입 채널c := make(chan bool)// 현재: string 타입 채널c := ma..
Channel?1. 코드 분석현재 우리가 살펴볼 코드는 Go 언어의 채널을 사용한 간단한 예제입니다:package mainimport ( "fmt" "time")func main() { c := make(chan bool) people := [2]string{"KSun", "Peter"} for _, person := range people { go isReady(person, c) } fmt.Println(2. 코드 동작 과정2.1 채널 생성c := make(chan bool)bool 타입의 언버퍼드 채널을 생성합니다이 채널은 고루틴 간의 통신을 위한 파이프 역할을 합니다2.2 고루틴 시작people := [2]string{"KSun", "Peter"}..
이번 포스트에서는 1초씩 10초간 세는 함수를 만들어서 2개 이상 실행시켜볼 것입니다.우리가 흔히 아는 컴파일 방식은 위에서 아래로 코드를 한 줄씩 실행시키는 것이기 때문에,카운터를 2개 실행시키면 첫 카운터를 10초간 세고, 이후 카운터를 이어서 10초를 세는 것이 일반적입니다. 결론부터 말하자면, Go에서는 동시에 시작할 수 있습니다! 먼저 기존 방식부터 볼까요?예상한 바와 같이 총 20초가 걸리게 됩니다.python과 같이 위에서부터 코드를 한 줄씩 실행시키는 언어의 경우의 문제가 여기서 나타나게 됩니다.총 해결해야하는 작업들 중 오래걸리는 작업이 하나라도 위에 껴있다면 작업이 지체되게 됩니다. 이제 우리는 Goroutines를 활용하여 동시 작업을 하려 합니다.근데, 방법이 너무 간단하답니다!go..
urls := []string{ "https://www.airbnb.com/", "https://www.google.com/", "https://www.amazon.com/", "https://www.reddit.com/", "https://www.google.com/", "https://soundcloud.com/", "https://www.facebook.com/", "https://www.instagram.com/", }위의 유명한 사이트들에 get 요청을 보내는 메서드를 만들어봅시다.참고로 Go 표준 라이브러리 중 net/http를 사용할 것입니다.https://pkg.go.dev/net/http package mainimport ( "errors" "fmt" "net/http")v..
안녕하세요. 이번 포스트에서는 저번 포스트에 이어 Dictionary의 Update, Delete 메서드를 만들어봅시다.# Update()먼저 Search()를 통해 Update하려는 keyword가 있는지 확인해야 합니다. 그리고 적절한 에러처리를 해줍시다.# mydict.govar errCantUpdate = errors.New("can't update non-existing word")// Update a word in the dictionaryfunc (d Dictionary) Update(word, def string) error { _, err := d.Search(word) switch err { case errNotFound: return errCantUpdate case nil: d[..
# type 선언흔히 알고 있는 dictionary 자료형과 같게,"hello" : "안녕""world" : "세상"과 같은 dictionary를 만들어봅시다. # mydict/mydict.gopackage mydict// Dictionary typetype Dictionary map[string]stringtype은 별명(Alias)로 생각하면 됩니다.기존의 자료형 map[string]string을 Dictionary로 부를 수 있게 되는 것입니다. # main.go # Search()이제 key를 통해 단어를 찾는 method를 만들어봅시다.Go에서 type으로 정의한 모든 타입에서 method를 만들 수 있습니다.그리고 go에서 map은 독특하게도 d[word]를 하게되면 return으로 (valu..
# 정리지금까지 우리는 계좌와 계좌생성 기능을 만들었었다. 이제 입금을 해보자.그 전에 잠깐 이전 코드를 다시 살펴보자.// NewAccount creates a new accountfunc NewAccount(owner string) *Account { return &Account{ owner: owner, balance: 0, }}// 이제 main.go에서account := accounts.NewAccount{"ksun"}이 경우 account의 type은 무엇일까? 질문에 답을 생각하며 다음으로 넘어가자.# Deposit() -> method맡길 금액을 입력받아 계좌에 충전하는 메소드를 만들어보자.// Deposit adds amount to the balancefunc (a Account..
# 계좌 예제type Account struct { // private members owner string balance int}계좌의 구성요소가 , 로 이루어져 있고 이를 private 하게 관리하고 싶다고 하자. 이제 이것을 간접적으로 접근할 수 있게 하는 이른바 getter/setter를 만들어보자.# NewAccount()func NewAccount(owner string) *Account { return &Account{ owner: owner, balance: 0, }}여기서 보이는 *과 &은 이전에 다뤘던 pointer의 개념이다. 조금 헷갈릴 수도 있는데 차근차근 살펴보자.Account{...}는 새로운 Account 구조체를 메모리에 생성한다.예를 들어 0x1040a123 ..