programming language/Go

[Go] go-tour _ basics [17/17]

moaoh 2021. 9. 23. 19:57

ํ•ด๋‹น๊ธ€์€ ์•„๋ž˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.

 

Go๋ฅผ ํ–ฅํ•œ ์—ฌํ–‰

 

go-tour-ko.appspot.com


Short variable declarations

package main

import "fmt"

func main() {
	var i, j int = 1, 2
	k := 3
	c, python, java := true, false, "no!"

	fmt.Println(i, j, k, c, python, java)
}

๋ณ€์ˆ˜๋“ค์˜ ๊ฐ’์„ ์ถœ๋ ฅ

ํ•จ์ˆ˜ ๋‚ด์—๊ฒŒ๋Š” := ํ˜•์‹์œผ๋กœ type์„ ์ง€์ •ํ•ด์ฃผ์ง€์•Š์•„๋„ ๋ณ€์ˆ˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ

ํ•จ์ˆ˜ ๋ฐ–์— ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๊ฒฝ์šฐ์—๋Š” := ํ˜•์‹์ด ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.


Basic types

 

package main

import (
	"fmt"
	"math/cmplx"
)

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func main() {
	fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
	fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
	fmt.Printf("Type: %T Value: %v\n", z, z)
}

ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ํƒ€์ž…๊ณผ ๊ฐ’์„ ์ถœ๋ ฅ

go์˜ ๊ธฐ๋ณธ์ ์ธ ํƒ€์ž…๋“ค ์ •๋ฆฌ.

 

%T : ํ•ด๋‹น ๊ฐ’์˜ ํƒ€์ž…์„ ์ถœ๋ ฅํ•œ๋‹ค.

%v : ๋ชจ๋“  ๊ฐ’์˜ ๊ธฐ๋ณธ ํ˜•์‹ ์ง€์ •์ž.


Zero values

package main

import "fmt"

func main() {
	var i int
	var f float64
	var b bool
	var s string
	fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

๊ฐ’์„ ์•ˆ๋„ฃ์–ด์ค€ ๋ณ€์ˆ˜๋“ค์˜ default ๊ฐ’ ํ™•์ธ 

  • ์ˆซ์ž type์—๋Š” 0
  • boolean type์—๋Š” false
  • string์—๋Š” "" (๋นˆ ๋ฌธ์ž์—ด)

๊ธฐ๋ณธ์ ์ธ ํ•ด๋‹น ํ˜•๋“ค์˜ value๋Š” ์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.


Type conversions

package main

import (
	"fmt"
	"math"
)

func main() {
	var x, y int = 3, 4
	var f float64 = math.Sqrt(float64(x*x + y*y))
	var z uint = uint(f)
	fmt.Println(x, y, z)
}

x, y, ๊ทธ๋ฆฌ๊ณ  x y ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•œ๋‹ค.

go์˜ ๊ฒฝ์šฐ์—๋Š” C์™€ ๋‹ค๋ฅด๊ฒŒ ๋‹ค๋ฅธ ํƒ€์ž…๋“ค ๊ฐ„์— ๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

ex) 

c์–ธ์–ด์˜ ๊ฒฝ์šฐ

int c = 97์„ %c๋กœ ์ถœ๋ ฅํ•˜๋ฉด a๋ผ๋Š” ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์ž๋งŒ go์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ผ๋Š” ์ด์•ผ๊ธฐ

 

์„ค๋ช… ์ž˜ํ•ด์ค€ ์ง€์œค๋ˆ„๋‚˜ ๋„ˆ๋ฌด ๊ณ ๋งˆ์›Œ์š”! ๐Ÿ˜Š


Type inference

package main

import "fmt"

func main() {
	v := 42 // change me!
	fmt.Printf("v is of type %T\n", v)
}

ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ถœ๋ ฅํ•œ๋‹ค.

:= ํ˜•์‹์œผ๋กœ ๋ช…์‹œ์ ์ธ ์„ ์–ธ์„ ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ๊ฐ’์— ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ๊ฐ€๋Šฅ.


Constants

package main

import "fmt"

const Pi = 3.14

func main() {
	const World = "ไธ–็•Œ"
	fmt.Println("Hello", World)
	fmt.Println("Happy", Pi, "Day")

	const Truth = true
	fmt.Println("Go rules?", Truth)
}

const ๊ฐ’๋“ค์„ ์ถœ๋ ฅ

๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” const๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•


Numeric Constants

package main

import "fmt"

const (
	// Create a huge number by shifting a 1 bit left 100 places.
	// In other words, the binary number that is 1 followed by 100 zeroes.
	Big = 1 << 100
	// Shift it right again 99 places, so we end up with 1<<1, or 2.
	Small = Big >> 99
)

func needInt(x int) int { return x*10 + 1 }
func needFloat(x float64) float64 {
	return x * 0.1
}

func main() {
	fmt.Println(needInt(Small))
	fmt.Println(needFloat(Small))
	fmt.Println(needFloat(Big))
}

const๋กœ ์„ ์–ธ๋œ ๊ฐ’์„ ์ถœ๋ ฅ

type๊ฐ€ ์ •ํ•ด์ง€์ง€์•Š์€ ์ƒ์ˆ˜๊ฐ’์€ ์ƒํ™ฉ์— ๋งž์ถฐ์„œ ๊ทธ ๊ฐ’์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

๋˜๊ฒŒ ์‹ ๋ฐ•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ ์ƒ์ˆ˜์˜ ๊ฐ’์„ ์ƒํ™ฉ์— ๋งž์ถฐ ์œ ๋™์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ํŽธํ•˜๊ณ 

ํ™œ์šฉ์„ฑ์ด ๋งŽ์„๊ฑฐ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.