GOμ–Έμ–΄

[GO] Goμ–Έμ–΄ νŠΉμ§•,λ³€μˆ˜,μƒμˆ˜,μ—΄κ±°ν˜•

HHRR 2023. 1. 5. 15:04

Hello Go World

1) Go 역사

- 2009λ…„ λ°œν‘œλœ μ˜€ν”ˆ μ†ŒμŠ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄. ν™ˆνŽ˜μ΄μ§€ : golang.org

- 온라인 Goμ–Έμ–΄ 컴파일러 : play.golang.org


2) Go μ–Έμ–΄ νŠΉμ§•

κ°œλ… μžˆλ‹€/μ—†λ‹€ μ„€λͺ…
클래슀 μ—†λ‹€ ν΄λž˜μŠ€λŠ” μ—†μ§€λ§Œ, λ§€μ„œλ“œλ₯Ό κ°€μ§€λŠ” ꡬ쑰체 지원
상속 μ—†λ‹€ 상속을 μ§€μ›ν•˜μ§€ μ•ŠμŒ
λ©”μ„œλ“œ  μžˆλ‹€ ꡬ쑰체가 λ©”μ„œλ“œ κ°€μ§ˆ 수 있음
μΈν„°νŽ˜μ΄μŠ€ μžˆλ‹€ 상속이 μ—†μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λŠ” 있음
읡λͺ… ν•¨μˆ˜ μžˆλ‹€ ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ΄λΌλŠ” μ΄λ¦„μœΌλ‘œ μ œκ³΅ν•¨
가비지 컬렉터 μžˆλ‹€ κ³ μ„±λŠ₯ 가비지 컬렉터λ₯Ό 제곡
포인터 μžˆλ‹€ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터가 있음
μ œλ„€λ¦­ ν”„λ‘œκ·Έλž˜λ° μ—†λ‹€ μ œλ„€λ¦­ ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜μ§€ μ•ŠμŒ
λ„€μž„ 슀페이슀 μ—†λ‹€ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμŒ. λͺ¨λ“  μ½”λ“œλŠ” νŒ¨ν‚€μ§€ λ‹¨μœ„λ‘œ 뢄리됨

3) μ½”λ“œ μ‹€ν–‰λ˜κΈ°κΉŒμ§€

1> 폴더 생성

Goμ–Έμ–΄μ—μ„œ λͺ¨λ“  μ½”λ“œλŠ” νŒ¨ν‚€μ§€ λ‹¨μœ„λ‘œ μž‘μ„±λ¨. 같은 폴더에 μœ„μΉ˜ν•œ .

goνŒŒμΌμ€ λͺ¨λ‘ 같은 νŒ¨ν‚€μ§€μ— ν¬ν•¨λ˜κ³ , νŒ¨ν‚€μ§€ λͺ…μœΌλ‘œ 폴더λͺ…을 μ‚¬μš©ν•¨. -> 폴더 λ‹€λ₯΄λ©΄ νŒ¨ν‚€μ§€λ„ 닀름

goproject/hello/extra

hello폴더에 λ“  .go νŒŒμΌμ€ hello νŒ¨ν‚€μ§€, extra 폴더에 λ“  .goνŒŒμΌμ€ extra νŒ¨ν‚€μ§€

 

2> .go 파일 생성 및 μž‘μ„±

Goλ¬Έλ²•μœΌλ‘œ μ½”λ“œ λ§Œλ“¦. ν™•μž₯μžλŠ” .go

 

3> Go λͺ¨λ“ˆ 생성

go mod init goproject/hello

go mod init 뒀에 λͺ¨λ“ˆ 이름 적어주어 go λͺ¨λ“ˆ 생성

μƒμ„±ν•˜λ©΄ go.mod 파일이 생성됨. (λͺ¨λ“ˆλͺ…, go버전, ν•„μš” νŒ¨ν‚€μ§€ λͺ©λ‘ 정보)

 

4> λΉŒλ“œ

go build λͺ…λ Ή -> Goμ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜μ—¬ μ‹€ν–‰νŒŒμΌ λ§Œλ“¦.

 

5> μ‹€ν–‰


4) μ½”λ“œ μ„€λͺ…

package main //ⓐ

import "fmt" //β“‘

func main() { //β“’
   fmt.Println("Hello World!") //β““
}
  • ⓐ : νŒ¨ν‚€μ§€(=μ½”λ“œ 묢음) μ„ μ–Έ, Goμ–Έμ–΄λŠ” νŒ¨ν‚€μ§€ μ„ μ–ΈμœΌλ‘œ μ‹œμž‘λ˜μ–΄μ•Όν•¨.
    main νŒ¨ν‚€μ§€(ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ  포함)에 μ†ν•œ μ½”λ“œμž„μ„ μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ•Œλ €μ€Œ.
  • β“‘ : fmt νŒ¨ν‚€μ§€(λ‚΄μž₯)λ₯Ό κ°€μ Έμ˜΄. ν‘œμ€€ μž…μΆœλ ₯ νŒ¨ν‚€μ§€ 
  • β“’ : main()ν•¨μˆ˜λ₯Ό μ„ μ–Έ. 
  • β““ : ν‘œμ€€ 좜λ ₯으둜 λ¬Έμžμ—΄μ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜

5) μ—°μŠ΅λ¬Έμ œ 

# 2번

였λ₯˜λŠ” main λ‘κ°œμ—¬μ„œ μƒκΈ°λŠ” 였λ₯˜μ—¬μ„œ μ—°μŠ΅λ¬Έμ œμ΄λ―€λ‘œ 일단 λ¬΄μ‹œν•œλ‹€.


λ³€μˆ˜

- λ³€μˆ˜μ˜ 속성 : 이름, κ°’, νƒ€μž…, μ£Όμ†Œ

- λ³€μˆ˜μ˜ μ„ μ–Έ = λ©”λͺ¨λ¦¬ ν• λ‹Ή

- νƒ€μž…λ³€ν™˜ : Goμ–Έμ–΄λŠ” μžλ™ λ³€ν™˜ μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μ—°μ‚°μ΄λ‚˜ λŒ€μž…μ—μ„œ νƒ€μž… λ³€ν™˜μ„ ν•΄μ€˜μ•Όν•¨

  • κΈ°λ³Έ λ³€μˆ˜ μ„ μ–Έ 방식
// λ³€μˆ˜ 1
package main

import "fmt"

func main() {
	//κΈ°λ³Έ μ΄ˆκΈ°ν™”
	//μ •μˆ˜νƒ€μž… : 0 , μ‹€μˆ˜(μ†Œμˆ˜μ ):0.0, λ¬Έμžμ—΄:"", Boolean:true, false
	//λ³€μˆ˜λͺ… : 숫자 μ²«κΈ€μžx, λŒ€μ†Œλ¬Έμž ꡬ뢄o, 문자 숫자 밑쀄 특수기호 μ‚¬μš© κ°€λŠ₯
	//λ³€μˆ˜ 및 μƒμˆ˜ : ν•¨μˆ˜ λ‚΄μ™Έ μ‚¬μš© κ°€λŠ₯
	var a int
	var b string
	var c, d, e int
	var f, g, h int = 1, 2, 3
	var i float32 = 11.4
	var j string = "Hi Golang!"
	var k = 4.74 //μ„ μ–Έ λ™μ‹œ μ΄ˆκΈ°ν™”
	var l = "Hi! Seoul!"
	var m = true

	a = 4
	b = "Hello Go!"
	e = 77

	fmt.Println("a : ", a)
	fmt.Println("b : ", b)
	fmt.Println("c : ", c)
	fmt.Println("d : ", d)
	fmt.Println("e : ", e)
	fmt.Println("f : ", f)
	fmt.Println("g : ", g)
	fmt.Println("h : ", h)
	fmt.Println("i : ", i)
	fmt.Println("j : ", j)
	fmt.Println("k : ", k)
	fmt.Println("l : ", l)
	fmt.Println("m : ", m)
}
  • κΈ°λ³Έ μ΄ˆκΈ°ν™” - μ •μˆ˜νƒ€μž… : 0, μ‹€μˆ˜(μ†Œμˆ˜μ ) : 0.0, λ¬Έμžμ—΄ : " ", Boolean : true, false
  • λ³€μˆ˜λͺ… : 숫자 μ²«κΈ€μžx, λŒ€μ†Œλ¬Έμž ꡬ뢄o, 문자 숫자 밑쀄 특수기호 μ‚¬μš© κ°€λŠ₯
  • λ³€μˆ˜ 및 μƒμˆ˜ : ν•¨μˆ˜ λ‚΄μ™Έ μ‚¬μš© κ°€λŠ₯

  • λ³€μˆ˜ μ—¬λŸ¬κ°œ μ„ μ–Έβ˜…
package main

import "fmt"

func main() {
	//μ—¬λŸ¬ 개 μ„ μ–Έ β˜…
	var (
		name      string = "machine"
		height    int32
		weight    float32
		isRunning bool
	)

	height = 250
	weight = 350.56
	isRunning = true

	fmt.Println("name: ", name, "height : ", height, "weight : ", weight, "isRunning : ", isRunning)
}

  • 짧은 λ³€μˆ˜ μ„ μ–Έ β˜…β˜…λ§Žμ΄μ“°μž„β˜…β˜…
package main

import "fmt"

func main() {
	//짧은 μ„ μ–Έ
	//ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ‚¬μš©(μ „μ—­x), μ„ μ–Έ ν›„ ν• λ‹Ή μ˜ˆμ™Έ λ°œμƒ β˜…β˜…β˜…
	//주둜 μ œν•œλœ λ²”μœ„μ˜ ν•¨μˆ˜ λ‚΄μ—μ„œ μ‚¬μš©ν•  경우 μ½”λ“œ 가독성을 높일 수 μžˆλ‹€. -> μΆ”μ²œ

	shortVar1 := 3 //ex였라클의 ν”„λ‘œμ‹œμ € λ§Œλ“€ λ•Œ
	shortVar2 := "Test"
	shortVar3 := false
	//shortVar3 := true -> μ˜ˆμ™Έ λ°œμƒ

	fmt.Println("shortVar1 : ", shortVar1, "shortVar2 : ", shortVar2, "shortVar3 : ", shortVar3)

	//Example
	if i := 10; i < 11 { //ifλ¬Έ μ•ˆμ—μ„œλ§Œ iμ‚¬μš© ν›„ λ°–μ—μ„œ μ†Œλ©Έ
		fmt.Println("Short Variable Test Success!")
	}

}
  • ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯함.(μ „μ—­x)
  • μ„ μ–Έ ν›„ λ‹€μ‹œ ν• λ‹Ή -> 였λ₯˜ λ°œμƒ β˜…β˜…
  • 주둜 μ œν•œλœ λ²”μœ„μ˜ ν•¨μˆ˜ λ‚΄μ—μ„œ μ‚¬μš©ν•  경우 μ½”λ“œ 가독성을 높일 수 μžˆλ‹€.(ex.ifλ¬Έ) -> μΆ”μ²œ!

 


μƒμˆ˜

  • μƒμˆ˜ κΈ°λ³Έ μ‚¬μš©λ²•
// μƒμˆ˜1
package main

import "fmt"

func main() {
	//μƒμˆ˜
	//const μ‚¬μš© μ΄ˆκΈ°ν™”, ν•œ 번 μ„ μ–Έν›„ κ°’ λ³€κ²½ κΈˆμ§€, κ³ μ •λœ κ°’ κ΄€λ¦¬μš©
	//μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”ν•΄μ€˜μ•Όν•¨
	const a string = "Test1"
	const b = "Test2"
	const c int32 = 10 * 10
	//const d = getHeight() -> μƒμˆ˜λŠ” κ°’ λͺ»λ°›μ•„μ˜΄
	const e = 35.6
	const f = false
	/*
		μ—λŸ¬ λ°œμƒ
		const g string
		g = "Test3"
	*/
	fmt.Println("a : ", a, "b : ", b, "c: ", c, "e : ", e, "f : ", f)

}
  • μƒμˆ˜ constλŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™” ν•΄μ€˜μ•Όν•¨
  • ν•œ 번 μ„ μ–Έν›„ κ°’ λ³€κ²½ κΈˆμ§€, κ³ μ •λœ κ°’ κ΄€λ¦¬μš©

  • μ—¬λŸ¬ μƒμˆ˜ μ„ μ–Έ
// μƒμˆ˜2
package main

import "fmt"

func main() {
	const a, b int = 10, 99
	const c, d, e = true, 0.84, "test" //각각 λ‹€λ₯Έ μžλ£Œν˜•
	const (
		//μ—¬λŸ¬κ°œ μ„ μ–Έ
		x, y int16 = 50, 90
		i, k       = "Data", 7776
	)
	fmt.Println(a, b, c, d, e)
	fmt.Println(x, y, i, k)

}
  • const()둜 λ¬Άμ–΄μ„œ μƒμˆ˜ μ—¬λŸ¬κ°œ μ„ μ–Έ κ°€λŠ₯.
  • 각각 λ‹€λ₯Έ μžλ£Œν˜• ν•œλ²ˆμ— μ„ μ–Έ κ°€λŠ₯

μ—΄κ±°ν˜•

  • iota
// μ—΄κ±°ν˜• 
package main

import "fmt"

func main() {
	//μ—΄κ±°ν˜•
	//μƒμˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μΌμ •ν•œ κ·œμΉ™μ— 따라 숫자λ₯Ό 계산 및 μ¦κ°€μ‹œν‚€λŠ” 묢음
	const (
		Jan = iota + 1
		Feb
		Mar
		Apr
		May
		Jun
	)

	fmt.Println(Jan)
	fmt.Println(Feb)
	fmt.Println(Mar)
	fmt.Println(Apr)
	fmt.Println(May)
	fmt.Println(Jun)
}
// μ—΄κ±°ν˜•
package main

import "fmt"

func main() {
	const (
		_ = iota + 0.75*2
		DEFAULT
		SILVER
		GOLD
		PLATINUM
	)

	fmt.Println("D : ", DEFAULT)
	fmt.Println("S : ", SILVER)
	fmt.Println("G : ", GOLD)
	fmt.Println("P : ", PLATINUM)

}
  • iotaλŠ” 0λΆ€ν„° 1μ”© μ°¨λ‘€λ‘œ μ¦κ°€ν•˜λ©° 값이 μ΄ˆκΈ°ν™”λ¨.
  • μƒλž΅ κ°€λŠ₯