목표
1. 0~99 사이 랜덤한 숫자 생성
2. 사용자 입력
3. 사용자 입력값이 크면 "큽니다" 작으면 "작습니다" 출력 2번 반복
4. 입력값이 같으면 프로그램 종료
랜덤
math/rand 패키지 사용rand.Seed(seed int64) 함수로 랜덤 시드(Seed) 설정rand.Intn(n int) int 함수로 0~(n-1) 사이의 값 생성
package main
import (
"fmt"
"math/rand"
)
func main() {
//seed 값에 의해 랜덤이 정해진다.
//알수 없는 랜덤값이 나오려면 seed 값이 바뀌어야한다.
//프로그램 실행시마다 계속 변화하는 값을 seed로 해야 진정한 랜덤 -> 대표적으로 시각
rand.Seed(100)
for i := 0; i < 10; i++ {
fmt.Println(rand.Intn(100))
}
}
시간
time 패키지를 사용하여 시간과 관련된 기능을 사용할 수 있다.
time.Now() 현재 시각 제공
func (t Time) UnixNano() int64 Time 객체의 t의 1970년 1월 1일부터 현재까지 경과된 시간을 nano seconds 단위로 반환
- 시각은 나타내는 Time 객체
- 시간을 나타내는 Duration 객체
- 타임존을 나타내는 Location 객체
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
t := time.Now()
rand.Seed(t.UnixNano())
for i := 0; i < 10; i++ {
fmt.Println(rand.Intn(100))
}
}
package main
import (
"fmt"
"time"
)
func main() {
loc, _ := time.LoadLocation("Asiz/Seoul")
const longForm = "JAn 2, 2006 at 3:06pm"
t1, _ := time.ParseInLocation(longForm, "Jun 14, 2021 at 10:00pm", loc)
fmt.Println(t1, t1.Location(), t1.UTC())
const shortForm = "2006-Jan-02"
t2, _ := time.Parse(shortForm, "2021-Jun-14")
fmt.Println(t2, t2.Location())
//month 의 모호함으로 에러 발생
t3, err := time.Parse("2021-06-01 15:20:21", "2021-06-14 20:04:05")
if err != nil {
fmt.Println(err)
}
fmt.Println(t3, t3.Location())
d := t2.Sub(t1)
fmt.Println(d)
}
목표 과제를 만들어보자
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"time"
)
//표준 입력 스트림으로 값을 읽을 수 있는 객체를 가져온다.
var stdin = bufio.NewReader(os.Stdin)
func InputIntValue() (int, error) {
var n int
_, err := fmt.Scanln(&n)
if err != nil {
//clear buffer
stdin.ReadString('\n')
}
return n, err
}
func main() {
rand.Seed(time.Now().UnixNano())
r := rand.Intn(100)
cnt := 1
for {
fmt.Println("숫자를 입력하세요 : ")
n, err := InputIntValue()
if err != nil {
fmt.Println("숫자만 입력하세요.")
} else {
if n > r {
fmt.Println("입력하신 숫자가 더 큽니다.")
} else if n < r {
fmt.Println("입력하신 숫자가 더 작습니다.")
} else {
fmt.Println("숫자를 맞췄습니다. 축하합니다. 시도한 횟수 : ", cnt)
break
}
}
cnt++
}
}
참고
'Programming Language > go' 카테고리의 다른 글
Go 언어 프로그래밍 - 함수 고급편 (0) | 2021.07.21 |
---|---|
Go 언어 프로그래밍 - 인터페이스 (0) | 2021.07.21 |
Go 언어 프로그래밍 - 문자열, 모듈과 패키지 (0) | 2021.07.16 |
Go 언어 프로그래밍 - 조건문과 반복문 (구조체, 포인터) (0) | 2021.07.14 |
Go 언어 프로그래밍 - 메서드 (0) | 2021.07.12 |