ํฐ์คํ ๋ฆฌ ๋ทฐ
๊ฐ์
- Go์ ๊ตฌ์กฐ์ฒด(struct)์ ํ์ (type) ๊ทธ๋ฆฌ๊ณ ๋ฉ์๋(method)์ ๋ํด์ ์์๋ณด์
๊ตฌ์กฐ์ฒด(struct)
- go์์๋ c์ ๊ตฌ์กฐ์ฒด์ ์ ์ฌํ ํํ๋ฅผ ์ง์ํ๋ค
- ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ธํจ์ผ๋ก์จ ์๋ก์ด ์๋ฃํ์ ์ ์ธํ ์ ์๊ณ , type-safe์๋ ํจ๊ณผ๊ฐ ์๋ค
- ์๋ ์์๋ฅผ ํตํด ์์๋ณด์
type user struct {
name string
age int
}
func main() {
user := user{name: "mokhs00", age: 23}
fmt.Println(user)
}
receiver์ method
- go์์๋ receiver๋ฅผ ์ด์ฉํด ๋ฉ์๋ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋ค
func (t T) Foo() {}
ํ์์ด๋ฉฐ ๊ธฐ์กด ํจ์์์ ์์(t *T)
๊ฐ ์ถ๊ฐ๋ ๊ฒ์ด๋ค (T๋ ํ์ ์ด๋ค)- T์ ๋ํ receiver๊ฐ ์กด์ฌํ๋ ํจ์๋ T๋ฅผ ์ด์ฉํด ํด๋น ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค ex)
T.Foo()
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ฐธ์กฐ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ ์ฃผ์ํ์
- ์ถ๊ฐ๋ก ํจ์๋ ๊ตฌ์กฐ์ฒด์ ๋ํ ์ฃผ์์ ํด๋น ์ฃผ์ฒด์ ๋์ผํ ์ด๋ฆ์ผ๋ก ์์ํด์ผํ๋ค
- ์ฃผ์์ ํตํด ์ฌ์ฉํ๋ ์ฌ๋๋ค์๊ฒ ํํธ๋ฅผ ์ค ์๋ ์๋ค
- ๋ค์ ์์๋ฅผ ํตํด ์์๋ณด์
// Account struct
type Account struct {
owner string
balance int
}
// NewAccount create Account
func NewAccount(owner string) *Account {
account := Account{owner: owner, balance: 0}
return &account
}
// Deposit x amount on the account
func (account *Account) Deposit(amount int) {
account.balance += amount
}
func main() {
a := account.NewAccount("mokhs")
a.Deposit(100)
}
struct String
- ๊ตฌ์กฐ์ฒด๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ๋์ค๋ ๋ฌธ์๋ฅผ ๋ณ๊ฒฝํ ์๋ ์๋ค
- ์ถ๋ ฅ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก String ๋ฉ์๋๋ฅผ ์คํํ๊ฒ ๋๋๋ฐ, String ๋ฉ์๋๋ฅผ receiver๋ฅผ ์ด์ฉํด ์ฌ์ ์ํ๋ฉด ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค
- ๋ค์ ์์๋ฅผ ํตํด ์์๋ณด์
func (account Account) String() string {
return fmt.Sprint(account.owner, " has: ", account.balance)
}
func main() {
a := account.NewAccount("mokhs")
a.Deposit(100)
// mokhs has:100
fmt.Println(a)
}
ํ์ (type)
- ๊ตฌ์กฐ์ฒด๊ฐ ์๋ ํ์ ์ ์ ์ํ ์ ์๋ค
- ์ด๋ type-safeํ ํ๋ก๊ทธ๋จ์ ์ํด์ ์ ์ฉํ๊ณ , ๋ค์ด๋ฐ์ ํตํด ๊ฐ๋ ์ฑ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค
- ๋ํ ํ์ ๋ ๊ตฌ์กฐ์ฒด์ ๋์ผํ๊ฒ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค
- ์๋ ์์๋ฅผ ํตํด ์์๋ณด์
// dict.go
// Dictionary type
type Dictionary map[string]string
var errNotFoundElement = errors.New("not found element")
func (dictionary Dictionary) Search(word string) (string, error) {
value, exists := dictionary[word]
if exists {
return value, nil
}
return "", errNotFoundElement
}
// main.go
func main() {
dict := dict.Dictionary{}
dict["a"] = "b"
dict.Search("a")
fmt.Println(dict)
}
๋ฐ์ํ
'Go' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Golang - Rate Limit (0) | 2023.09.16 |
---|---|
Go : ๊ณ ๋ฃจํด(goroutine), ์ฑ๋(channels) (0) | 2022.03.20 |
Go ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ๋ํด์ ์์๋ณด์ (0) | 2022.03.18 |
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
TAG
- mysql ์คํ ๊ณํ
- ํ(Heap)
- ์ถ์ ์ง๋
- Aws Reinvent 2023
- rate limit
- 2๋ ์ฐจ ์๋ฒ ๊ฐ๋ฐ์
- AWS re:Invent 2023
- 2023 ๊ฐ๋ฐ์ ํ๊ณ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ฅ์ ํ๊ณ
- ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS)
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
- Go
- mysql
- Golang
- golang oomkilled
- ๋ฐฑ์ค
- ์ข์ ์์ง๋์ด
- ๋ฑ ํฌ์๋ฌ๋ ๊ฐ๋ฐ์
- ์ฝ๋ฉํ ์คํธ
- kotlin s3 upload
- ์ข์ ๊ฐ๋ฐ์
- ์ข์ ๊ฐ๋ฐ์ ๋๊ธฐ
- grpc client
- ์คํ/ํ
- 2023 ํ๊ณ
- ํด์
- ์๊ณ ๋ฆฌ์ฆ
- HTTP
- ์ข์ ์ฝ๋๋ ๋ฌด์์ธ๊ฐ?
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
๊ธ ๋ณด๊ดํจ