package main
import (
"fmt"
"reflect"
)
func main() {
var c rune = '가'
a := 7
fmt.Printf("%T\n", c)
fmt.Printf("%T\n", a)
fmt.Println(reflect.TypeOf(c))
fmt.Println(reflect.TypeOf(a))
}
- fmt 모듈의 Printf 메소드 이용
- reflect 모듈의 TypeOf 메소드 이용
package main
import (
"fmt"
)
func main() {
var e string
var d bool
var c rune
var b float64
var a int
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
}
- int, float64, rune 등 숫자형 자료형은 초기값이 0
- bool 논리형 자료형은 초기값이 false
- string 문자형 자료형은 초기값이 ''
- 변수명은 영문자로 시작해야 됨
- 영문 대문자의 경우 다른 패키지에서 접근 가능
- 소문자로 시작하는 변수는 동일 패키지에서만 접근 가능
- 관례로는
- camelCase 방식을 사용
- index는 i로 줄여서 선언
package main
import (
"fmt"
"strings"
)
func main() {
texts := "G@ M@ney~~"
fmt.Println(texts)
r := strings.NewReplacer("@","o")
newText := r.Replace(texts)
fmt.Println(newText)
}
- strings의 메소드로 파라미터는 (바꾸고싶은 문자열, 바꿀 문자열)
- 문자열 교체 인스턴스를 반환
- 문자열 교체 인스턴스의 메소드로 파라미터는(문자열)
- 바뀐 문자열을 반환
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
fmt.Print("숫자 입력 : ")
rd := bufio.NewReader(os.Stdin)
in, _ := rd.ReadString('\n')
fmt.Println(in)
}
- Standard Input/OutPut 표준 입출력 ex) 키보드
- 파라미터 값이 오기 전까지 읽음
- 읽은 데이터, 에러 반환
- Go언어 특성상 쓰지않으면 에러를 발생
- _는 쓰지 않아도 됨
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
fmt.Print("숫자 입력 : ")
rd := bufio.NewReader(os.Stdin)
in, err := rd.ReadString('\n')
if err != nil {
log.Fatal(err)
}else{
fmt.Println(in)
}
}
- 위에 결과는 if 문이 없을 때
- 아래 결과는 if 문이 있을 때
- 에러가 없으면 err 에 nil 반환
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
"strings"
)
func main() {
fmt.Print("숫자 입력 : ")
rd := bufio.NewReader(os.Stdin)
in, err := rd.ReadString('\n')
if err != nil {
log.Fatal(err)
}
in = strings.TrimSpace(in)
dan, err := strconv.ParseInt(in, 10, 32)
if err != nil {
log.Fatal(err)
}
fmt.Println(dan * 2)
}
- 파라미터 (문자열, 진수, 크기(bit))
- 문자열 정수로 변환 값, 에러 반환
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
"strings"
)
func main() {
fmt.Print("숫자 입력 : ")
rd := bufio.NewReader(os.Stdin)
in, err := rd.ReadString('\n')
if err != nil {
log.Fatal(err)
}
in = strings.TrimSpace(in)
dan, err := strconv.ParseInt(in, 10, 32)
if err != nil {
log.Fatal(err)
}
for i := 1; i<10; i++ {
fmt.Println(dan, " * ", i, " = ", (int(dan)*i))
}
}
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
"strings"
)
func main() {
fmt.Print("숫자 입력 : ")
rd := bufio.NewReader(os.Stdin)
in, err := rd.ReadString('\n')
if err != nil {
log.Fatal(err)
}
in = strings.TrimSpace(in)
dan, err := strconv.Atoi(in)
if err != nil {
log.Fatal(err)
}
i := 1
for i < 10 {
fmt.Printf("%d * %d = %d\n", dan, i, (dan * i))
i++
}
}
- Go 언어에선 while문이 없음
- for 문이 while문 처럼 동작할 수 있음
rand
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
seed := time.Now().Unix()
rand.Seed(seed)
dice := rand.Intn(6) + 1
fmt.Println(dice)
}
- seed를 설정해 주지 않으면 동일한 값만 출력
- 파라미터 (끝값)
- 0 ~ 끝값 전값 의 난수 반환
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
seed := time.Now().Unix()
rand.Seed(seed)
isPrime := true
number := rand.Intn(150) + 2
fmt.Println("임의로 추출된 수 : ", number)
for i := 2; i < number; i++ {
if number % i == 0{
isPrime = false
break
}
}
if isPrime {
fmt.Println(number ,"는(은) 소수입니다!")
}else {
fmt.Println(number ,"는(은) 소수가 아닙니다~")
}
}
- isPrime는 flag로 나누어 떨어지면 false
- 나누어 떨어지면 break 반복문 탈출