데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Golang Quick Start

      SSunny 23.05.18
      1,647 17 0

      Golang Quick Start

      Golang 사용법

      변수 선언 : var, Short Variable Declaration Operator(:=)

      Package 선언 및 활용

      Struct (json 으로 변환)

      Receiver function

      Interface 선언, 활용

      변수 선언

      변수 선언은 아래 와 같이 선언합니다.

      • var 변수명 타입 - 디폴트 값이 false

      • var 변수명 = 값

      • 변수명 : 값 - Short Variable Declaration Operator(:=)

      package main  //
      
      import "fmt"  //패키지 선언
      
      //함수작성
      func vari_check() {  
      
      	//boolean
      	var isDev bool
      	var isTrue = true
      
      	//int8, byte, int16, int32, int64, uint8, uint16, uint32, rune,  uint64
      	//byte 는 uint8 의 별칭, rune 은 int32의 별칭
      	var x int //0
      	var y int = 1
      	var z = 2
      	var a, b int = 1, 2
      	var c, d = 3, "a"
      
      	// float32, float64
      	var e float64 //0
      	var f = 0.0 //0
      
      	//string 타입은 rune, byte
      	var g rune = 'r' //114 
      	var h string = string(g) //r
      	var k byte = 'k' //107 
      	var l string = string(k) //k
      
      	//Short Variable Delcaration Operator(:=) 를 사용하여 var 와 type 키워드 없이 변수를 선언하고 바로 할당
      	i := 10
      	j := 20.5
      	ss := "Hello World"
      
      	fmt.Println(isDev, isTrue)
      
      	fmt.Println(x, y, z)
      	fmt.Println(a, b, c, d)
      	fmt.Println(e, f)
      
      	fmt.Println(g, h)
      	fmt.Println(k, l)
      
      	fmt.Println(i)
      	fmt.Println(j)
      	fmt.Println(ss)
      
      }
      
      func main() {
      	fmt.Println("Hello world!!!")
      	vari_check()
      }
      ----output------
      > go run main.go
      Hello world!!!
      false true
      0 1 2
      1 2 3 a
      0 0
      114 r
      107 k
      10
      20.5
      Hello World

      Package 선언 및 활용

      Go에서 패키지는 코드의 모듈화를 가능하게 합니다. 패키지를 사용하면 코드를 더욱 쉽게 관리하고 재사용할 수 있습니다.

      Go에서 패키지 선언은 package 키워드를 사용하여 선언합니다. 패키지 이름은 파일 이름과 일치해야 합니다.

      패키지를 사용하려면 다음과 같이 import 키워드를 사용하여 가져와야 합니다.

      import "fmt"

      위 코드는 Go의 표준 라이브러리 중 하나인 fmt 패키지를 가져오는 코드입니다. fmt 패키지는 포맷된 입출력을 제공합니다.

      다른 패키지를 가져오는 방법은 위와 동일합니다. 가져온 패키지를 사용하려면 패키지 이름을 접두사로 사용하여 함수나 변수를 호출하면 됩니다.

      fmt.Println("Hello, World!")

      위 코드는 fmt 패키지의 Println 함수를 사용하여 "Hello, World!"를 출력하는 코드입니다.

      Struct (json 으로 변환)

      Go에서 struct는 다음과 같이 정의됩니다.

      type Person struct {
          Name    string
          Age     int
          Email   string
      }

      필드 이름의 첫 글자는 대문자로 적어야 합니다. struct를 JSON으로 변환하려면 json 패키지를 가져와야 합니다.

      import "encoding/json"
      
      p := Person{Name: "John", Age: 30, Email: "john@example.com"}
      
      b, err := json.Marshal(p)
      if err != nil {
          fmt.Println("error:", err)
      }
      fmt.Println(string(b))

      Marshal 함수

      Go에서 Marshal 함수는 구조체를 JSON으로 변환하는 함수입니다. encoding/json 패키지에서 제공하는 함수입니다.

      구조체를 JSON으로 변환하려면 다음과 같이 json.Marshal() 함수를 사용합니다.


      위 코드는 Person 구조체를 선언하고 초기화합니다. 그리고 json.Marshal() 함수를 사용하여 Person 구조체를 JSON으로 변환합니다.

      변환된 JSON은 []byte 타입으로 반환됩니다. string() 함수를 사용하여 JSON을 문자열로 변환하여 출력합니다.


      출력 결과는 다음과 같습니다.

      {"Name":"John","Age":30,"Email":"john@example.com"}

      https://w.cublr.com/programming/go/golang-marshal-unmarshal/

      출처: https://w.cublr.com/programming/go/golang-marshal-unmarshal/

      Receiver function

      Go 언어에서는 Receiver 함수를 사용하여 특정 타입에 대한 함수를 작성할 수 있습니다.

      Receiver 함수는 func 키워드와 함께 함수 이름 앞에 특정 타입(타입과 변수명)을 괄호로 묶어 작성됩니다.

      이런걸 리시버(Receiver)라고 부르고 이 리시버는 특별히 밸류 리시버(Value Receiver)라고 합니다.

      리시버가 장착된 함수는 더 이상 함수가 아니라 메소드가 됩니다.

      예를 들어, 다음과 같이 Person 타입에 대한 greet 함수를 작성할 수 있습니다.

      type Person struct {
          Name string
      }
      
      func (p Person) greet() {
          fmt.Println("Hello, my name is", p.Name)
      }
      
      func main() {
          p := Person{Name: "John"}
          p.greet()
      }

      위의 예제에서는 Person 타입에 대한 greet 함수를 작성합니다. Person 타입의 Name 필드를 출력하는 함수입니다.

      greet 함수는 Person 타입의 Receiver 함수로 작성됩니다. main 함수에서는 Person 구조체를 선언하고 greet 함수를 호출합니다.

      출력 결과는 다음과 같습니다.

      Hello, my name is John

      Receiver 함수를 사용하면 특정 타입에 대해 함수를 작성할 수 있으므로, 코드를 더욱 모듈화하고 응집도를 높일 수 있습니다.

      Receiver 함수를 사용하여 코드를 작성할 때는, 타입의 필드와 메서드를 잘 구분하여 작성하는 것이 좋습니다.

      이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.



      출처: https://kamang-it.tistory.com/entry/Go15%EB%A9%94%EC%86%8C%EB%93%9CMethod%EC%99%80-%EB%A6%AC%EC%8B%9C%EB%B2%84Receiver

      Interface 선언, 활용

      Go에서 인터페이스는 다른 언어와 마찬가지로 추상화를 제공합니다. 인터페이스는 다음과 같이 선언됩니다.

      type Shape interface {
          area() float64
          perimeter() float64
      }

      위의 예제에서는 Shape 인터페이스를 선언합니다. Shape 인터페이스는 area()와 perimeter() 메서드를 가지고 있습니다.

      구조체나 사용자 정의 타입이 area()와 perimeter() 메서드를 구현하면 해당 타입은 Shape 인터페이스를 구현하게 됩니다.

      type Rectangle struct {
          width, height float64
      }
      
      func (r Rectangle) area() float64 {
          return r.width * r.height
      }
      
      func (r Rectangle) perimeter() float64 {
          return 2*r.width + 2*r.height
      }

      위의 예제에서는 Rectangle 구조체를 선언합니다. Rectangle 구조체는 width와 height 필드를 가지고 있습니다.

      Rectangle 구조체는 area()와 perimeter() 메서드를 구현하고 있습니다. Rectangle 구조체는 Shape 인터페이스를 구현하게 됩니다.

      func printShape(s Shape) {
          fmt.Printf("Area = %0.2f Perimeter = %0.2f\\n", s.area(), s.perimeter())
      }
      
      func main() {
          r := Rectangle{width: 10, height: 5}
          printShape(r)
      }

      위의 예제에서는 printShape() 함수를 선언합니다. printShape() 함수는 Shape 인터페이스를 받아서 area()와 perimeter() 메서드를 호출하고 출력합니다.

      main() 함수에서는 Rectangle 구조체를 선언하고 printShape() 함수를 호출합니다. 출력 결과는 다음과 같습니다.

      Area = 50.00 Perimeter = 30.00

      위의 예제에서는 Rectangle 구조체가 Shape 인터페이스를 구현하고 있으므로 printShape() 함수에서 Rectangle 구조체를 인자로 전달할 수 있습니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      SSunny 님의 최신 블로그

      더보기
      동영상 기고하기