본문 바로가기

4차산업/블록체인

Golang Basic

 [링크]제로 배우는 Go 프로그래밍

http://golang.site/go/article/1-Go-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%96%B8%EC%96%B4-%EC%86%8C%EA%B0%9C


Go는 2009년 구글에서 개발한 간결한 문법과 생산성을 제공하는 프로그래밍 언어이다. 


 golang의 특징


1. 간결한 문법 

    Go는 키워드가 25개로 간결하고 배우는데 다른 언어에 비해 상대적으로 시간이 적게 걸림.


2. 개발 속도 및 컴파일 언어

     컴파일 방식의 언어이며, 간결한 의존성 해석 알고리즘을 통해 다른 컴파일 언어에 비해 빠르게 동작하는 컴파일러 제공.


3. 가비지 컬렉션(GC)

    메모리를 관리해주는 가비지 컬렉터가 실행 파일 안에 내장 되어 있어 직접 관리하지 않아도 됨.


4. 동시성

    동시성을 지원하기 위해 고루틴이라는 것을 지원함. 스레드와 유사하지만 더 적은 메모리를 소비하여 더 적은 양의 코드로 구현할 수 있는 데이터 구조.


5. 타입시스템 

    계층구조가 없는 유연한 타입 시스템을 제공하기 때문에 리팩토링에 대한 부담을 최소화 하면서 코드를 재사용할 수 있음.


Golang의 특징을 정의해 놓은 다음 사이트의 내용을 정리함.

https://velog.io/@veloss/GoLang-%ED%83%90%EB%B0%A9%EA%B8%B0-golang%EC%9D%B4%EB%9E%80-vpjmr8weoa



구글 홈페이지의 Google Go팀이 작성한 많은 자료를 참조할 수 있음.

 Go 설치

 

# wget https://storage.googleapis.com/golang/go1.7.linux-md64.tar.gz

# tar -xvzf go1.7.linux-amd64.tar.gz

# mv go /usr/local


# export PATH=$PATH:/usr/local/go/bin

# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


# go version

go version go1.7 linux/amd64


# mkdir $HOME/workspace

# export GOPATH:$HOME/workspace




















  Go 언어 구조 이해

패키지명이 main인 경우 컴파일러는 패키지를 공유 라이브러리가 아닌 실행 프로그램으로 만듦

 package main



Go 표준라이브러리인 fmt  패키지를 사용하기 위해 import

 import "fmt"


함수사용

 // 문자열 받아서 처리함

 func say(msg *string) {

     println(*msg) 

 }


 // 문자열을 매개 변수로 받음 

 func say(msg ...string) {

    for _, s := range msg {

           println(s)

    }

 }


 // 여러개 숫자늘 매개변수로 받아 int값 반환

 func sum(nums ...int) int {

    s := 0

    for _, n := range nums {

          s += n

    }

  }


 // 여러개 숫자늘 매개변수로 받아 변수명 count인 int   // 값과 total인 int 값을 반환 

 func sum(nums ...int) (count int, total int) {

    s := 0

    for _, n := range nums {

          s += n

    }

  }



구조체 선언

 

 type Rect struct {        // 구조체

     width, height int

 }



func 키워드와 함수명사이에 "그 함수가 어떤 struct를 위한 메서드인지"를 표시. receiver라고 불리며, 메서드가 속한 struct타입과 struct 변수명을 지정. struct 변수명은 함수 내에서 마치 입력 파라미터 처럼 사용됨.

값으로  받음

 

 // Rect 구조체의 메소드 area() 

 func (r Rect) area() int {

    return r.width * r.height

 }



포인트로 받음

 

 // Rect 구조체의 메소드 area2()

 func ( r *Rect) area2() int {

    r.width++

    return r.width * r.height

 }

 


main() 함수

 

 func main() { 

     fmt.Println("Go Test")

     rect := Rect{10,20}

     area := rect.area()

     println(area)

     area2 := rect.area2()

     println(rect.width, area2)

 }




 실행하기

 

 # go run test.go

 
 또는

 # go build




'4차산업 > 블록체인' 카테고리의 다른 글

비잔틴 장애 허용(BFT)  (0) 2019.01.16
Docker 정리  (0) 2019.01.13
Hyperledger Fabric 특징과 구성요소  (0) 2019.01.03
curl 사용법  (0) 2018.12.08
이더리움 스마트 건트랙트 시큐어코딩  (0) 2018.12.05