본문 바로가기
프로그래밍/Go언어

Go "fmt" 패키지의 사용법과 Print, 내장함수 println 차이

by Hwan2 2021. 4. 18.
728x90
반응형

 

 

 

Golang 에서는 "fmt" 라는 기본적인 패키지를 제공해줍니다.

 

처음 Golang을 접하게 되면 당연 출력하는 것이 "Hello warld"라고 생각합니다.

 

다음 예제를 보시죠.

 

package main

import "fmt"

func main() {
	println("hi")
	fmt.Println("fmt")
}

//Output
hi
fmt

 

fmt 패키지를 사용해 Println이라는 메소드를 호출하여 흔히 문자열을 출력합니다.

그럼 println 은 뭘까요??

 

fmt.Println()stdout 으로 표준 문자열 출력을 제공하는 함수입니다.

println()은 내장된 함수로 stderr를 출력해주는 내장함수 입니다.

 

때문에 println()은 주로 디버깅 할때 유용하다고 합니다.

 

 

그럼 fmt 패키지에서 제공해주는 print() 에 대해 살펴보도록 하겠습니다.

 

1. 출력

fmt.Print()

Println(a ...interface{}) (n int, err error)

Println formats using the default formats for its operands and writes to standard output.
Spaces are always added between operands and a newline is appended.
It returns the number of bytes written and any write error encountered.

Println에 대한 설명입니다.

쉽게 말해서 Println을 사용할 때 ','로 구분지어 출력하면 피연산자 사이에 공백이 생기며, 맨 마지막줄엔 개행이 추가된다는 뜻입니다.

 

또한 에러 발생시 error 객체를 반환한다고 되어 있습니다. 

package main

import (
	"fmt"
)

func main() {

	fmt.Println("name", nil)	//output : name <nil>
	fmt.Println("hwan", 10, 10, "word") //output : hwan 10 10 word
}

 

1) 구조체 출력

package main

import (
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {

	st := User{"name", 10}

	fmt.Printf("%v\n", st)	//output : {name, 10}
	fmt.Printf("%#v\n", st) //output : main.User{Name:"name", Age:10}
	fmt.Printf("%+v\n", st) //output : {Name:name Age:10}
	fmt.Printf("%T\n", st)  //output : main.User
	//fmt.Printf("%%\n", st)
}

 

%v : 구조체 내용물 가져와서 출력

%#v : 해당 구조체를 호출하는 구간과 내용 출력(디버깅용)

%+v : 해당 구조체의 변수 이름까지 함께 출력

%T : 해당 구조체 호출 구간 출력

2) 자료형 출력

package main

import (
	"fmt"
)

func main() {

	var num int = 10
	var name string = "hwan"
	var byte1 byte = 'A'
	var boolean bool = true
	var f float32 = 1.5
	var p *int = &num

	fmt.Printf("%d\n", num)     //output : 10 (정수)
	fmt.Printf("%f\n", f)       //output : 1.500000(실수)
	fmt.Printf("%s\n", name)    //output : hwan(문자열)
	fmt.Printf("%b\n", byte1)   //output : 1000001(2진수)
	fmt.Printf("%0o\n", byte1)  //output : 101(8진수)
	fmt.Printf("%x\n", byte1)   //output : 41(16진수)
	fmt.Printf("%c\n", byte1)   //output : A(char)
	fmt.Printf("%t\n", boolean) //output : true(boolean)
	fmt.Printf("%U\n", byte1)   //output : U+0041(유니코드)
	fmt.Printf("%p\n", &p)      //output : 0xc000006028(포인터가 가르키는 주소 값 = num의 주소 값)
	fmt.Printf("%p\n", p)       //output : 0xc000014088(포인터 주소 값)
}

 

 

%d 정수
%f 실수
%c 문자
%s 문자열
%0o 8진수
%x 16진수
%b 2진수
%t 참 혹은 거짓
%U 유니코드
%p 주소 값

 

 

3)문자열

package main

import (
	"fmt"
)

func main() {

	var name string = "hwan"
	var str1 string = "abc\n" +
		"def"
	var str2 string = `abc\n` + name
	var str3 string = `qqq\n
	zzzz`

	fmt.Println(`hello` + name)		//output : hellohwan
	fmt.Println(str1)			//output : abc
						//		   def
	fmt.Println(str2)			//output : abc\nhwan
	fmt.Println(str3)			//output : qqq\n
						//				zzzz
}

 

string의 경우 " 와 ` 를 사용하여 문자열를 정의할 수 있습니다.

` 를 사용하는 경우 문자열의 리터럴 값이 그대로 들어가게 되며,

" 를 사용하는 경우 문자 개행같은 키워드들이 적용되어 나타나게 됩니다.

 

 

 

반응형

'프로그래밍 > Go언어' 카테고리의 다른 글

Golang for문 사용법!!  (0) 2021.05.16
Golang 구조체 설명  (0) 2021.05.02
Go lang 시작하기(VSCode 셋팅)  (0) 2021.04.05
Go 언어의 goroutine에 대해서...  (0) 2020.11.04
Go언어를 왜 사용 할까?  (0) 2020.11.04

댓글


스킨편집 -> html 편집에서