Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

golang factory

Language/go lang 2018.02.13 13:18
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


golang factory?


[ 호출부]

json.NewDecoder(reader).Decode(&msg)


[Decode]

func (dec *Decoder) Decode(v interface{}) error {
if dec.err != nil {
return dec.err
}

if err := dec.tokenPrepareForDecode(); err != nil {
return err
}

if !dec.tokenValueAllowed() {
return &SyntaxError{msg: "not at beginning of value"}
}

// Read whole value into buffer.
n, err := dec.readValue()
if err != nil {
return err
}
dec.d.init(dec.buf[dec.scanp : dec.scanp+n])
dec.scanp += n

// Don't save err from unmarshal into dec.err:
// the connection is still usable since we read a complete JSON
// object from it before the error happened.
err = dec.d.unmarshal(v)

// fixup token streaming state
dec.tokenValueEnd()

return err
}


위의 소스에서 Decode 함수를 보자.

err = dec.d.unmarshal(v)라는게 눈에 띈다.

아래의 Encode함수도 마찬가지로 err := e.marshal(v, encOpts{escapeHTML: enc.escapeHTML}) 이라는게 있다.

[Encode]

func (enc *Encoder) Encode(v interface{}) error {
if enc.err != nil {
return enc.err
}
e := newEncodeState()
err := e.marshal(v, encOpts{escapeHTML: enc.escapeHTML})
if err != nil {
return err
}

// Terminate each value with a newline.
// This makes the output look a little nicer
// when debugging, and some kind of space
// is required if the encoded value was a number,
// so that the reader knows there aren't more
// digits coming.
e.WriteByte('\n')

b := e.Bytes()
if enc.indentPrefix != "" || enc.indentValue != "" {
if enc.indentBuf == nil {
enc.indentBuf = new(bytes.Buffer)
}
enc.indentBuf.Reset()
err = Indent(enc.indentBuf, b, enc.indentPrefix, enc.indentValue)
if err != nil {
return err
}
b = enc.indentBuf.Bytes()
}
if _, err = enc.w.Write(b); err != nil {
enc.err = err
}
encodeStatePool.Put(e)
return err
}


아래의 링크를 타고 내용을 보면 Marshal의 값은 v를 재귀적으로 호출한다.  v는 인터페이스!  또한 발생한 값이 Marshal 인터페이스를 구현하고 nil pointer가

아닐 경우 MarshalJSON 메소드를 호출하여 JSON을 생성하는 프로세스이다. 그러므로 아래처럼 MarshalJSON메소드를 구현 해주면 그녀석이 발동 된다는 것이다.

func Marshal(v interface{}) ([]byte, error)

2018/02/09 - [Language/go lang] - golang - Package json


예를 들어 아래와 같이 메소드가 있다면 아래의 MarshalJSON()을 호출하여 그안에서 factory를 생성한다.

func (m *AceTMessage) MarshalJSON(b []byte) error {


m.Test = newFactory(m.Header.Type)


}


newFactory() 가 factory관련 소스이다.

var exFactory = map[string]func() Test{ // type에 따라 처리가 되어지는 구조.



- 끝 - 









'Language > go lang' 카테고리의 다른 글

golang factory  (0) 2018.02.13
golang - Package json  (0) 2018.02.09
valid 시 non zero value required 오류  (0) 2018.02.02
Review  (0) 2017.10.24
test code..반성!  (0) 2017.10.13
golang Context란?  (0) 2017.09.07

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

golang - Package json

Language/go lang 2018.02.09 13:44
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

import "encoding/json"

json 패키지는 RFC 4627에 정의 된 JSON의 인코딩 및 디코딩을 구현합니다. 

JSON 및 Go 값 간의 매핑은 marshal 및 unmarshal 함수에 대한 설명서에 설명되어 있습니다.

func Marshal(v interface{}) ([]byte, error)

Marshal은 v의 JSON 인코딩을 반환합니다. Marshal은 값 v를 재귀적으로 호출한다.
발생한 값이 
Marshal 인터페이스를 구현하고 nil 포인터가 아닌 경우 MarshalJSON 메서드를 호출하여 JSON을 생성합니다. 
MarshalJSON 메서드가 없지만 값이 encoding.TextMarshaler를 대신 구현하면 Marshal은 해당 MarshalText 메서드를
호출하고 결과를 JSON 문자열로 인코딩합니다. 
nil 포인터 예외가 반드시 필요한 것은 아니지만 UnmarshalJSON의 동작에서 비슷하고 필요한 예외를 모방합니다.
그렇지 않은 경우, Marshal은 다음과 같은 유형 종속 기본 인코딩을 사용합니다.

부울 값은 JSON 부울 값으로 인코딩됩니다. 부동 소수점, 정수 및 숫자 값은 JSON 숫자로 인코딩됩니다.

문자열 값은 유효한 UTF-8로 강제 변환 된 JSON 문자열로 인코딩되어 유효하지 않은 바이트를 유니 코드 대체 문자로 대체합니다. 꺽쇠 괄호 "<"및 ">"는 "\ u003c"및 "\ u003e"로 이스케이프 처리되어 일부 브라우저가 JSON 출력을 HTML로 오해하지 않게합니다. 앰퍼샌드 "&"도 같은 이유로 "\ u0026"로 이스케이프됩니다. 이 이스케이프는 SetEscapeHTML (false)가 호출 된 인코더를 사용하여 비활성화 할 수 있습니다. 배열 및 슬라이스 값은 JSON 배열로 인코딩됩니다. 단, [] 바이트는 base64 인코딩 된 문자열로 인코딩되고 nil 슬라이스는 null JSON 값으로 인코딩됩니다. 구조체 값은 JSON 객체로 인코딩됩니다. 각 내보내기 된 구조체 필드는 개체 이름으로 필드 이름을 사용하여 개체의 멤버가됩니다. 필드가 아래에 나와있는 이유 중 하나로 생략되지 않는 한 각 구조체 필드의 인코딩은 구조체 필드의 태그에서 "json"키 아래에 저장된 형식 문자열을 사용하여 사용자 정의 할 수 있습니다. 형식 문자열은 필드의 이름을 제공하며 그 뒤에 쉼표로 구분 된 옵션 목록이옵니다. 기본 필드 이름을 무시하지 않고 옵션을 지정하려면 이름이 비어있을 수 있습니다.

"omitempty"옵션은 필드에 빈 값이 있거나 false, 0, nil 포인터, nil 인터페이스 값 및 빈 배열, 슬라이스, 맵 또는 문자열로 정의 된 필드가 인코딩에서 생략되어야한다고 지정합니다. ex) Field int `json:"myName,omitempty"` / Field int `json:",omitempty"`

특수한 경우 필드 태그가 "-"인 경우 필드는 항상 생략됩니다. ex) Field int `json:"-"`

이름이 "-"인 필드는 여전히 "-"태그를 사용하여 생성 할 수 있습니다. ex) Field int `json:"-,"`

유니 코드 문자, 숫자 및 ASCII 구두점 (인용 부호, 백 슬래시 및 쉼표 제외)으로 구성된 비어 있지 않은 문자열 인 경우 키 이름이 사용됩니다.

익명 구조체 필드는 일반적으로 내부 내보내기 필드가 외부 구조체의 필드 인 것처럼 마샬링되며 다음 단락에서 설명하는대로 일반적인 Go 가시성 규칙이 수정됩니다. JSON 태그에 주어진 이름을 가진 익명 구조체 필드는 익명이 아닌 해당 이름을 가진 것으로 취급됩니다. 인터페이스 유형의 익명 구조체 필드는 익명이 아닌 이름으로 해당 유형을 갖는 것과 동일하게 취급됩니다.

마샬링 또는 언 마샬링 할 필드를 결정할 때 구조체 필드에 대한 가시성 규칙이 JSON에 맞게 수정되었습니다. 같은 레벨에 여러 개의 필드가 있고 해당 레벨이 가장 작은 중첩 된 경우 (따라서 일반 Go 규칙에 의해 선택된 중첩 레벨이 됨) 다음과 같은 추가 규칙이 적용됩니다.
1) 이러한 필드 중 JSON 태그가 있는 경우 태그가없는 필드가 여러 개있는 경우에도 태그가있는 필드만 고려됩니다.
2) 정확히 하나의 필드 (첫 번째 규칙에 따라 태그가 지정 되었는지 여부)가 선택되면 해당 필드가 선택됩니다.

3) 그렇지 않으면 여러 필드가 있으며 모두 무시됩니다. 오류가 발생하지 않습니다.

익명 구조체 필드의 처리는 Go 1.1에서 새로 추가되었습니다. Go 1.1 이전에는 익명 구조체 필드가 ​​무시되었습니다. 현재 버전과 이전 버전의 익명 구조체 필드를 강제로 무시하려면 해당 필드에 "-"JSON 태그를 지정하십시오.

예제)

func Unmarshal(data []byte, v interface{}) error

Unmarshal은 JSON으로 인코딩 된 데이터를 구문 분석하고 결과가 v가 가리키는 값에 저장합니다. v가 nil이거나 포인터가 아닌 경우 Unmarshal은 InvalidUnmarshalError를 반환합니다.

Unmarshal은 마샬러가 사용하는 인코딩의 역함수를 사용하여 필요에 따라 maps, slices 및 포인터를 할당하고 다음과 같은 추가 규칙을 사용합니다.

Unmarshal은 JSON을 포인터로 unmarshal하기 위해 먼저 JSON 리터럴 null 인 JSON의 대소문자를 처리합니다. 이 경우 Unmarshal은 포인터를 nil로 설정합니다. 그렇지 않으면, Unmarshal은 JSON을 포인터가 가리키는 값으로 unmarshal합니다. 포인터가 nil이면 Unmarshal은 포인터가 가리키는 새 값을 할당합니다.

JSON을 Unmarshaler 인터페이스를 구현하는 값으로 unmarshal하기 위해 Unmarshal은 입력 값이 JSON null 인 경우를 포함하여 해당 값의 UnmarshalJSON 메서드를 호출 합니다. 그렇지 않은 경우 값이 encoding.TextUnmarshaler를 구현하고 입력 값이 JSON 인용 문자열이면 Unmarshal은 해당 값의 UnmarshalText 메소드를 인용되지 않은 문자열 형식으로 호출합니다.

JSON을 구조체로 unmarshal하려면 Unmarshal이 들어오는 객체 키를 marshal(구조체 필드 이름 또는 해당 태그)에서 사용하는 키와 일치 시키며 정확히 일치하는 것을 선호하지만 대 / 소문자를 구분하지 않는 일치를 허용합니다. Unmarshal은 구조체의 내 보낸 필드 만 설정합니다.

JSON 배열을 Go 배열로 unmarshal하기 위해 Unmarshal은 JSON 배열 요소를 해당 Go 배열 요소로 디코딩합니다. Go 배열이 JSON 배열보다 작은 경우 추가 JSON 배열 요소가 삭제됩니다. JSON 배열이 Go 배열보다 작은 경우 추가 Go 배열 요소는 0 값으로 설정됩니다.

.








'Language > go lang' 카테고리의 다른 글

golang factory  (0) 2018.02.13
golang - Package json  (0) 2018.02.09
valid 시 non zero value required 오류  (0) 2018.02.02
Review  (0) 2017.10.24
test code..반성!  (0) 2017.10.13
golang Context란?  (0) 2017.09.07

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

valid 시 non zero value required 오류

Language/go lang 2018.02.02 14:20
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


func checkRequired(v reflect.Value, t reflect.StructField, options tagOptionsMap) (bool, error) {
if requiredOption, isRequired := options["required"]; isRequired {
if len(requiredOption) > 0 {
return false, Error{t.Name, fmt.Errorf(requiredOption), true}
}
return false, Error{t.Name, fmt.Errorf("non zero value required"), false}
} else if _, isOptional := options["optional"]; fieldsRequiredByDefault && !isOptional {
return false, Error{t.Name, fmt.Errorf("All fields are required to at least have one validation defined"), false}
}
// not required and empty is valid
return true, nil
}


위의 validator.go 소스를 살펴보자.

requried면 value를 가지고 체킹을 하게 된다.

즉, 값이 0이 들어오는데 required를 사용하게 된다면 false인 것이다. 즉 valid가 유효하지 못하다.

제거를 해주면 0이나 "" 이 들어와도 값이 없는 것으로 간주하지는 않을 것이다.

golang ref : 

 - https://godoc.org/

 - https://play.golang.org/


열공 열공~!

'Language > go lang' 카테고리의 다른 글

golang factory  (0) 2018.02.13
golang - Package json  (0) 2018.02.09
valid 시 non zero value required 오류  (0) 2018.02.02
Review  (0) 2017.10.24
test code..반성!  (0) 2017.10.13
golang Context란?  (0) 2017.09.07

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

Review

Language/go lang 2017.10.24 19:33
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



java 말고 golang

input / output은 동일하게 / export되지 않는 함수면 소문자로 SetValue (X) setValue(O)

acet.EntityInfo = setValue(acet.EntityInfo)

interface conversion

switch문을 사용할 수 있다. 해당 case의 타입이 들어오면 맞는 case 구문을 타게 된다.

ex) Body가 인터페이스 형태  

switch acet.Body.(type) {

case *xxx.xxxx:

case *aaa.xxxx:

default :

}







'Language > go lang' 카테고리의 다른 글

golang - Package json  (0) 2018.02.09
valid 시 non zero value required 오류  (0) 2018.02.02
Review  (0) 2017.10.24
test code..반성!  (0) 2017.10.13
golang Context란?  (0) 2017.09.07
go lang - Map  (0) 2017.07.05

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

test code..반성!

Language/go lang 2017.10.13 14:05
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

java나 go lang이나 테스트 코드가 있다.

테스트 주도 개발이 좋다고 책에서 많이 보았다. 하지만 정작 그러한 책들을 보았음에도 불구하고..

간만에 코드를 짜게 되었는데..(그동안 서버 발주부터 셋팅, ACL 신청 등등 이러한 일들을 했다.)

테스트 코드를 짜야겠다는 생각을 하지 않은채 코드를 짰고, 테스트도 리퀘스트 부분만 잘들어가는지 대충 확인하고 다되었다고 PR을 날렸다.

리뷰의 결과는 창피했다.

왜 나는 꼼꼼하게 테스트 코드를 짜면서 테스트를 하지 않았을까?

당연..테스트 코드를 짜기가 부담스러웠나보다..또는 단순하게만 테스트 코드를 짜왔을지도 모른다.

막상 하려고보니..멍~하다. 

자..그럼 이제 무엇을 해야할까?

1) 앞으로 계속 두려워하며 쫄아서 피할것인가?

                   OR

2) 두려움을 극복하려고 노력할 것인가?


당연히 2번인가? 그렇다면 어떻게 노력할 것인가? 이게 가장 중요한 포인트 이다.

지금 이렇게 포스팅을 하는 이유도 노력의 시작의 일부임에는 틀림없다.

이제 시작되었으니 제대로 파악해서 제대로 사용해보자.

화이팅!



'Language > go lang' 카테고리의 다른 글

valid 시 non zero value required 오류  (0) 2018.02.02
Review  (0) 2017.10.24
test code..반성!  (0) 2017.10.13
golang Context란?  (0) 2017.09.07
go lang - Map  (0) 2017.07.05
golang 정리  (0) 2017.05.18

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

golang Context란?

Language/go lang 2017.09.07 16:33
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


https://golang.org/pkg/context/   or https://godoc.org/golang.org/x/net/context

Package context는 마감 시간, 취소 신호 및 기타 요청 범위 값을 API 경계와 프로세스간에 전달하는 컨텍스트 유형을 정의합니다.

서버에 들어오는 요청은 컨텍스트를 만들어야하며 서버로 나가는 호출은 컨텍스트를 받아 들여야합니다. 이들 사이의 함수 호출 체인은 컨텍스트를 전파해야하며 선택적으로 WithCancel, WithDeadline, WithTimeout 또는 WithValue를 사용하여 생성 된 파생 된 컨텍스트로 대체해야합니다. 컨텍스트가 취소되면 그 컨텍스트도 파생됩니다.


작성 중~

'Language > go lang' 카테고리의 다른 글

Review  (0) 2017.10.24
test code..반성!  (0) 2017.10.13
golang Context란?  (0) 2017.09.07
go lang - Map  (0) 2017.07.05
golang 정리  (0) 2017.05.18
GOROOT와 GOPATH  (0) 2017.04.27

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

go lang - Map

Language/go lang 2017.07.05 17:09
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

go는 변수명 다음에 자료형이 온다.
ex) var acet string 

java는 반대이다.
ex) String acet;

Map
go
var 맵명 map[키 자료형]값 자료형
ex) var acet map[string]int 
할당은 make 사용! 예제는 아래에 있음.

java는 
HashMap<String, int> acet = new HashMap<String, int>


코드를 보자!
아래의 사이트에서 바로 테스트 해보면 된다.
https://tour.golang.org/moretypes/19

package main

import "fmt"

func main() {

    // 자바에서는 new가 있다면 go에서는 make로 map을 할당한다.
    var acet map[string]string = make(map[string]string)
    acet = map[string]string{"a":"aaaa"}    
    fmt.Println(acet["a"])
    
     var mae = make(map[string]string)
     mae = map[string]string{"mae":"bbbb"}
     fmt.Println(mae["mae"])
    
     lov := make(map[string]string)
     lov = map[string]string{  // 뉴라인으로 하려면 마지막에 콤마(,)가 필요함.
         "haha":"cccc",
         "hoho":"dddd",
     }
     fmt.Println(lov["haha"])    
    
     // key가 없는지 알수 있는 방법은 리턴값 두번째를 이용. 없으면 false 리턴!
     solaSystem := make(map[string]string)
     solaSystem["earth"] ="my galaxy"
     // 자바는 put 사용. solaSystem.put("earth", "my galaxy");
     solaSystem["earth2"] ="goood~"
     fmt.Println(solaSystem["earth"])
     // 자바는 get 사용. solaSystem.get("earth");
    
     value, ok := solaSystem["mars"]
     fmt.Println(value, ok)
    
     // java와 달리 if구문에 괄호가 없다! 아래와 같이 요상하게 보일만한 문법을 자주 사용!
     // 리턴도 2개 이상..깜놀;
     // 자바에서는 키가 있는지 확인은 solaSystem.containsKey("earth2");를 사용.
     if value, ok := solaSystem["earth2"]; ok {
         fmt.Println(value)
    
     }
    
     // 맵 순회 -> for 키, 값 := range 맵{}
     for key, value := range solaSystem {
         fmt.Println(key, value)    
     }
    
     // value를 사용하고 싶지 않다면 언더바(_) 사용..허허~
     for key, _ := range solaSystem {
         fmt.Println(key, value)    
     }
    
     //맵에서 데이터 삭제!
     // 자바에서는 solaSystem.remove("earth"); 를 사용.
     delete(solaSystem, "earth")
     _, isOk := solaSystem["earth"]
     fmt.Println(isOk)
    
    
}

결과




'Language > go lang' 카테고리의 다른 글

test code..반성!  (0) 2017.10.13
golang Context란?  (0) 2017.09.07
go lang - Map  (0) 2017.07.05
golang 정리  (0) 2017.05.18
GOROOT와 GOPATH  (0) 2017.04.27
go land에서 formatting 설정하기  (0) 2017.04.26

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

golang 정리

Language/go lang 2017.05.18 14:42
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T




func NewRequest(method, urlStr string, body io.Reader) (*Request, error) {


NewRequest는 메소드, URL 및 선택적 본문에 대해 새 Request를 반환합니다.
제공된 본문이 io.Closer 인 경우 반환되는 Request.Body가 body로 설정되고 클라이언트에 의해 닫힙니다. 
메소드 Do, Post, PostForm, Transport.RoundTrip.NewRequest는 Client.Do와 함께 사용하기에 적합한 Request를 반환하거나 Transport.RoundTrip.
테스트에 사용할 요청을 만들려면 Server Handler는 다음과 같이 NewRequest 함수를 사용합니다. 
net / http / httptest 패키지를 사용하거나 ReadRequest를 사용하거나 필드를 요청하십시오. 요청 유형에 대한 설명서를 참조하십시오. 
인바운드 및 아웃 바운드 요청 필드의 차이. 
body가 * bytes.Buffer, * bytes.Reader 또는 * 형식 인 경우
* strings.Reader, 반환 된 요청의 ContentLength는 
정확한 값 (-1 대신), GetBody가 채워집니다 (따라서 307과 308 리디렉션은 본문을 재생할 수 있음). 본문은 NoBody로 설정됩니다. 

ContentLength는 0입니다. 


}




func (r *Request) WithContext(ctx context.Context) *Request {


WithContext는 컨텍스트가 변경된 r의 얕은 복사본을 반환합니다. 

to ctx. 제공된 ctx는 nil이 아니어야합니다. 

}



- 계속 -

'Language > go lang' 카테고리의 다른 글

golang Context란?  (0) 2017.09.07
go lang - Map  (0) 2017.07.05
golang 정리  (0) 2017.05.18
GOROOT와 GOPATH  (0) 2017.04.27
go land에서 formatting 설정하기  (0) 2017.04.26
go lang Tip.  (0) 2017.02.15

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

GOROOT와 GOPATH

Language/go lang 2017.04.27 13:42
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



https://github.com/golang/go/wiki/GOPATH


GOPATH 환경 변수는 Go 프로젝트 및 해당 바이너리 소스를 포함하는 $ GOROOT 외부의 디렉토리를 지정하는 데 사용됩니다.

GO Lang은 아래와 같은 구조로 강제성을 가진다.

terrypark@MacBook-Pro:~/go$ ll -rw-r--r--@ 1 terrypark staff 6148 4 26 13:41 .DS_Store drwxr-xr-x 19 terrypark staff 646 4 4 17:21 bin drwxr-xr-x 3 terrypark staff 102 2 2 11:13 pkg drwxr-xr-x 9 terrypark staff 306 3 2 14:20 src


/Users/terrypark/go/src/github.com/ace-t/test-code

위와 같이 go directory 아래는 src 즉, 소스부분이 된다.

go install 수행 시 bin에 바이너리가 만들어진다.


GOPATH부분은 아래를 보면 어디까지가 GOPATH인지 가늠할 수가 있다.


$GOPATH/src/code.google.com/p/gomatrix


ex) jenkins에서 go build 시

export GOPATH=$WORKSPACE/$BUILD_NUMBER

echo "build=>"+$GOPATH

cd $GOPATH/src/github..com/ace-t/xxxProject

glide install

go build

echo "go build end" 


IDE에서도 알수가 있는데 GOPATH와 GPROOT는 아래와 같다.



'Language > go lang' 카테고리의 다른 글

go lang - Map  (0) 2017.07.05
golang 정리  (0) 2017.05.18
GOROOT와 GOPATH  (0) 2017.04.27
go land에서 formatting 설정하기  (0) 2017.04.26
go lang Tip.  (0) 2017.02.15
go lang - fresh를 사용해 보자.  (0) 2017.02.15

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

go land에서 formatting 설정하기

Language/go lang 2017.04.26 18:57
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

go land에서 formatting 설정하기


1.  Preferences.. > Plugins 에서 File Watchers를 install 합니다.



2. File Watchers > gofmt 설정. go bin에 gofmt가 없다면 goimports로 해도 된다.

Arguments: -w $FilePath$


'Language > go lang' 카테고리의 다른 글

golang 정리  (0) 2017.05.18
GOROOT와 GOPATH  (0) 2017.04.27
go land에서 formatting 설정하기  (0) 2017.04.26
go lang Tip.  (0) 2017.02.15
go lang - fresh를 사용해 보자.  (0) 2017.02.15
go lang을 해보자.  (0) 2017.02.03

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

go lang Tip.

Language/go lang 2017.02.15 17:45
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


tip_1 ) Test를 하고 싶다면?

아래와 같은 사이트가 있는데 이녀석은 테스트에서 사용 되어진다고 한다. 아직 사용해본적은 없지만 사용하게 되면 포스팅 하도록 하겠다.

http://goconvey.co/


tip_2) Mac에서 짠 뒤에 리눅스에서 동작하게 하려면?

build를 할 디렉토리에서 아래와 같이 env GOOS=linux라고 지정!

ex) env GOOS=linux go build


tip_3) go에서 패키지 관리는 어떻게 할까?

Java에 Maven같은게 있다면 Go는 glide라는 것이 있습니다.

https://github.com/Masterminds/glide

활용은 https://glide.sh/ 를 참조 또는 아래를 참조!

$ glide create                            # Start a new workspace - glide.yaml이 생성 된다!
$ open glide.yaml                         # and edit away!
$ glide get github.com/Masterminds/cookoo # Get a package and add to glide.yaml
$ glide install            # Install packages and dependencies - glide.lock(버전관리)가 생성.
# work, work, work
$ go build                 # Go tools work normally
$ glide up                 # Update to newest versions of the package - 사용잘 안함.

이것을 사용하는 이유는 디펜던시가 있는것은 패키지 관리에서 하면 좋다.

ex) $ glide get github.com/foo/bar


tip_4) go의 lib같은것은 어디서 검색하나? 구글? 다음?

https://godoc.org/

https://github.com/avelino/awesome-go

https://golanglibs.com/

위의 사이트에서 우선 찾아보자! 없는게 없다~


tip_5) golang study site

https://tour.golang.org/list




'Language > go lang' 카테고리의 다른 글

golang 정리  (0) 2017.05.18
GOROOT와 GOPATH  (0) 2017.04.27
go land에서 formatting 설정하기  (0) 2017.04.26
go lang Tip.  (0) 2017.02.15
go lang - fresh를 사용해 보자.  (0) 2017.02.15
go lang을 해보자.  (0) 2017.02.03

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

go lang - fresh를 사용해 보자.

Language/go lang 2017.02.15 17:29
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


이번 내용은 go get 이라는 명령어를 통해 Fresh 라는 것을 사용해 보자.

Fresh is a command line tool that builds and (re)starts your web application everytime you save a Go or template file.

저장 하면 바로바로 적용이 된다.

https://github.com/pilu/fresh 에서 README.md를 참조!


Installation

go get github.com/pilu/fresh


실행은 어플리케이션이 있는 곳으로 이동한 뒤에 fresh 라는 명령어를 쳐주면 서버가 기동 되어진다.

fresh의 프로세스를 kill을할 때 유의 점으로는 fresh 말고도 runner_build라는것을 kill 해주어야 한다.





'Language > go lang' 카테고리의 다른 글

golang 정리  (0) 2017.05.18
GOROOT와 GOPATH  (0) 2017.04.27
go land에서 formatting 설정하기  (0) 2017.04.26
go lang Tip.  (0) 2017.02.15
go lang - fresh를 사용해 보자.  (0) 2017.02.15
go lang을 해보자.  (0) 2017.02.03

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

go lang을 해보자.

Language/go lang 2017.02.03 10:39
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

  1. 링크를 통해 OS에 맞는 것을 다운 받는다. (https://golang.org/dl/)
  2. home에서 go dir를 하나 만들어준다.
  3. 다운 받은 pkg를 클릭클릭 하여 셋팅해준다.
  4. .bash_profile에 환경변수를 잡아준다. 

        # GOPATH
        export GOPATH=$HOME/go
        PATH=${PATH}:/usr/local/go/bin:${GOPATH}/bin

    5. go 라는 명령어를 통해 잘 깔렸는지 확인.

더보기


go가 이제 셋팅 되었다! 코드를 짜기전에 github에 레파지토리를 하나 만들자.

   6. github repository 생성

위에서 home밑에 go 디렉토리를 만들어줬다. 이제 그 아래에 src라는 디렉토리를 하나 더 만든다.(go lang 구조)

그런뒤에  /goStudy github의 레파지토리를 디렉토리로 만들어준다.

home>go>src>ace-t>goStudy dir이 만들어졌다면 이 안에서 git clone을 해준다.

ex) terrypark@MacBook-Pro:~/go/src/ace-t/goStudy$ git clone https://github.com/ace-t/goStudy.git

아래처럼 .git과 README.md가 보일 것이다.


이제! 대망의 소스를 코딩 해 보자! 필자는 지인분이 추천해준 해당 사이트를 따라해보려고 합니다.(https://mingrammer.com/gobyexample/)

먼저 go 파일을 하나 만들어줍니다.

terrypark@MacBook-Pro:~/go/src/ace-t/goStudy/goStudy$ vi hello-world.go

아래와 같이 소스를 코딩합니다.

package main

import "fmt"

func main() {

        fmt.Println("hello world")

}


실행해봅니다.

terrypark@MacBook-Pro:~/go/src/ace-t/goStudy/goStudy$ go run hello-world.go

hello world


이제~~위의 사이트에서 문법을 차근차근 해보면 되겠습니다.

어느정도 문법이 익숙해지면 좀 더 들어가보도록 하겠습니다.

ace-t github : https://github.com/ace-t/goStudy/tree/develop

github을 많이 사용하도록 해봐야겠습니다. ㅎㅎ

  - 끝 -




'Language > go lang' 카테고리의 다른 글

golang 정리  (0) 2017.05.18
GOROOT와 GOPATH  (0) 2017.04.27
go land에서 formatting 설정하기  (0) 2017.04.26
go lang Tip.  (0) 2017.02.15
go lang - fresh를 사용해 보자.  (0) 2017.02.15
go lang을 해보자.  (0) 2017.02.03

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

Language/Java 2016.10.27 16:48
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


problem

java -version

-bash: /acet/program/jdk/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory


solution

$ yum -y install glibc.i686

Loaded plugins: fastestmirror, security

You need to be root to perform this command.

[deploy@lineup-data-krane program]$ sudo yum -y install glibc.i686

Loaded plugins: fastestmirror, security

Setting up Install Process

Loading mirror speeds from cached hostfile

Resolving Dependencies

--> Running transaction check

---> Package glibc.i686 0:2.12-1.192.el6 will be installed

--> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.12-1.192.el6.i686

--> Processing Dependency: libfreebl3.so for package: glibc-2.12-1.192.el6.i686

--> Running transaction check

---> Package nss-softokn-freebl.i686 0:3.14.3-23.3.el6_8 will be installed

--> Finished Dependency Resolution


result

$ java -version

java version "1.8.0_101"

Java(TM) SE Runtime Environment (build 1.8.0_101-b13)

Java HotSpot(TM) Server VM (build 25.101-b13, mixed mode)



acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

python 2.7 한글처리 문제

Language/Python 2016.10.07 14:47
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


위의 코드는 print unicode(line) 으로 출력시 오류가 발생 함.



print unicode(line, 'cp949')

한글 처리를 위해 위의 코드처럼 cp949를 유니코드로 변환 해주면 한글이 잘 출력이 된다.


Simple 테스트 코드


#-*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')


f = open("/Users/terrypark/pythonPrj/target.txt", 'r')
line = f.readline()
print unicode(line, 'cp949')

 

 


읽어볼만한 글!

더보기


'Language > Python' 카테고리의 다른 글

python 2.7 한글처리 문제  (0) 2016.10.07
특정 PORT Check  (0) 2016.06.14
install PyMySQL  (0) 2015.07.21
crontab+python3  (0) 2015.06.30
python???  (0) 2015.06.22
RND(Right! Now! Develop!) Study - Python Step. 02 자료형_02  (0) 2014.08.17

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

자바 예외처리를 생각해보자.

Language/Java 2016.09.26 18:16
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


예외의 종류는 2가지로 보면 된다.

checked exception과 unchecked exception

말그대로 체크가 되는 예외와 예기치 못하게 발생하는 예외를 뜻한다. 

또한 unchecked exception은 runtime exception 이라고 많이 불리운다.

여기서 생각해보아야 할 것이 있다. 어떤 처리를 해주어야 예외처리를 잘하는 걸까?

보통은 Exception가 발생하면 잡아서 에러로그를 찍어주거나 상위로 올려주어서 처리를 하기도 한다.

try {

   ... 블라블라 ...

} catch(Excetpion e) {

   logger.error(e.getMessage);

}

토비책에서도 제대로된 예외처리를 하라고 살짝 나오기도 한다. 

과연..어떤 예외처리가 제대로된 예외처리일까? 사람마다 다를수 있을것 같기도 하다.(책임과 구조가 중요하기 때문..)

다음 RND 스터디(지인들과 만든 스터디 그룹)에서 토론해보면 좋을것 같다. 

개인적으로는 

1) 런타임 예외에 대한 것을 아래처럼 공통화(소스)를 한다!

예)

public class CommonLineupException extends RuntimeException{

    public static final Logger logger = LoggerFactory.getLogger(CommonLineupException.class);

    public CommonLineupException(String message){

        super(message);

        logger.error(message);

    }

}

2) 런타임 예외는 발생 시킨다! 고려사항으로 런타임 예외가 났을 경우 어떻게 처리를 해주는가를 더 생각해봐야한다.

  - MVC 구조라면 컨트롤러까지 올려서 관련 내용 처리 하기
  - api라고 한다면 유용정보(에러로그) 남기기


3) 또한 service -> service 구조이거나 service안에 여러 메소드들로 만들어져있다면

런타임 예외가 발생하는 메소드들이 그책임을 다해야 한다. 그안에서 에러로그와 런타임 예외를 발생 시켜 위로 올려주거나 하면 된다.


팁 : 스프링프레임워크에서는 예외를 잘할 수 있도록 도움을 주는 어노테이션이 존재한다.

참고 : https://www.mkyong.com/spring-mvc/spring-mvc-exceptionhandler-example/ 

또한 db단하고 붙어있다면 롤백 유무와도 상관이 있다. 롤백이 되려면 런타임 예외에만 가능하기 때문이다.


정리하자면..런타임 예외를 잘이용하고 에러로그를 쉽게 오류를 찾을 수 있도록 정보를 넣을수 있도록 한다.


   - 끝 - 

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

특정 PORT Check

Language/Python 2016.06.14 18:33
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


모니터링 관련해서 작업을 하는데 음..잘만들어져있는듯..굿굿 

정말 손쉽게 작업을할 수 있었음!


아래는 파이썬 특정 포트 체크!

0이면 정상, 1이면 오류~


오랜만에 포스팅 하는듯..ㅠㅠ 화이팅 해야지! 아자아자~


#!/usr/bin/python


import socket;


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


check_server = '127.0.0.1'

check_port = 8080

result = sock.connect_ex((check_server, check_port))

if result == 0:

   print "0"

else:

   print "1"


sock.close()

'Language > Python' 카테고리의 다른 글

python 2.7 한글처리 문제  (0) 2016.10.07
특정 PORT Check  (0) 2016.06.14
install PyMySQL  (0) 2015.07.21
crontab+python3  (0) 2015.06.30
python???  (0) 2015.06.22
RND(Right! Now! Develop!) Study - Python Step. 02 자료형_02  (0) 2014.08.17

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

Integer.valueOf / Integer.parseInt

Language/Java 2016.05.19 23:13
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


왜 자꾸 오류가 나나..싶었는데...


Integer.valueOf(queryTimeStr); // queryTimeStr은 스트링형태가 확실했다...


원인은..int 범위를 넘어서였다..-_-;;


삽질 하다니 ㅋㅋㅋㅋ

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

  • BlogIcon Geetha 2016.06.10 14:48 신고 답글 | 수정/삭제 | ADDR

    This blog provides useful information about new techniques and concepts.very impressive lines are given which is very attractive.

    • Favicon of http://acet.pe.kr BlogIcon String Ace-T 2016.06.11 01:40 신고 수정/삭제

      Thank you for your comment and visit!
      and I am happy because of your message:D
      Thanks! I wanna share infos more and more :D

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

couchbase와 같은 키/벨류의 key design??

Language/Scala 2016.04.15 10:25
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T




오픈소스로 키/벨류의 형태의 스토리지들이 많이 있다. Redis나 couchbase등이 그 예이다. 

이러한 스토리지들에 저장을할 때 고려사항으로 key를 어떤식으로 만들어야할 지 고민이 되어진다.

왜냐하면 이러한 key들은 한정되어진 범위를 가지고 있다. couchbase의 경우는 250byte로 제한을 둔다. 

또한 이러한 key들의 무결성을 보장되어야 한다. 그렇지 않으면 데이터의 유실이 발생할 수가 있다.

그래서 생각했던 것이 Hash였다. 그러나 자바진형의 String에서 제공되어지는 Hash는 중복의 염려가 있다고 한다.

그래서 SHA-1 + Base64 Encoding(urlSafe)를 선택 하였다.

아래는 스칼라 코드이며 해당 키는 아래의 소스를 통해 "IbDNShu-PGxJtnsUVuDJLv-aJoU=" 이러한 형태로 키가 만들어진다. goood~


build.sbt에는 아래와 같이 dependencies를 추가!

libraryDependencies ++= Seq(

   "me.lessis" %% "base64" % "0.2.0"

) 


import~~

import base64.Encode 


SHA-1 + Base64 Encoding(urlSafe)

val md = java.security.MessageDigest.getInstance("SHA-1")

val keyword = {

  new String(Encode.urlSafe(md.digest("스트링~~".getBytes)))

} 


- END -


'Language > Scala' 카테고리의 다른 글

couchbase와 같은 키/벨류의 key design??  (0) 2016.04.15
(기초) 스칼라 데이터 구조(컬렉션)  (0) 2016.03.25
(기초) 스칼라 문법  (0) 2016.03.25

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

(기초) 스칼라 데이터 구조(컬렉션)

Language/Scala 2016.03.25 16:19
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T




2016/03/25 - [Language/Scala] - (기초) 스칼라 문법

참고 사이트 : https://twitter.github.io/scala_school/ko/collections.html


scala> val numbers = List(1,2,3,4,5)

numbers: List[Int] = List(1, 2, 3, 4, 5)


scala> Set(1,2,2)

res20: scala.collection.immutable.Set[Int] = Set(1, 2)


scala> val hostPort = ("localhsot", 8080)

hostPort: (String, Int) = (localhsot,8080)


scala> hostPort._1

res21: String = localhsot


scala> hostPort._2

res22: Int = 8080


scala> 1->2

res23: (Int, Int) = (1,2)


scala> ("D", (1,2,3))

res25: (String, (Int, Int, Int)) = (D,(1,2,3))


scala> ("H", (4,5,6))

res26: (String, (Int, Int, Int)) = (H,(4,5,6))


scala> ("D", (1,2,3)) -> ("H", (4,5,6))

res27: ((String, (Int, Int, Int)), (String, (Int, Int, Int))) = ((D,(1,2,3)),(H,(4,5,6)))


scala> Map(1 -> 2)

res28: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)


scala> Map("foo" -> "bar")

res29: scala.collection.immutable.Map[String,String] = Map(foo -> bar)


scala> Map(1-> Map("foo" -> "bar"))

res31: scala.collection.immutable.Map[Int,scala.collection.immutable.Map[String,String]] = Map(1 -> Map(foo -> bar))


scala> numbers.map((i:Int) => i *2)

res33: List[Int] = List(2, 4, 6, 8, 10)


scala> numbers.foreach((i: Int) => i * 3)


scala> val value = numbers.foreach((i:Int) => i * 7)

value: Unit = ()


scala> def isEven(i:Int): Boolean = i % 2 == 0

isEven: (i: Int)Boolean


scala> numbers.filter(isEven _)

res37: List[Int] = List(2, 4)


scala> val numbers = List(1,2,3,4,5,6,7,8)

numbers: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)


scala> numbers.partition(_ % 2 == 0)

res39: (List[Int], List[Int]) = (List(2, 4, 6, 8),List(1, 3, 5, 7))


scala> numbers.find((i: Int) => i > 5)

res40: Option[Int] = Some(6)


scala> numbers.drop(5)

res41: List[Int] = List(6, 7, 8)


scala> numbers.dropWhile(_ %2 != 0)

res42: List[Int] = List(2, 3, 4, 5, 6, 7, 8)






'Language > Scala' 카테고리의 다른 글

couchbase와 같은 키/벨류의 key design??  (0) 2016.04.15
(기초) 스칼라 데이터 구조(컬렉션)  (0) 2016.03.25
(기초) 스칼라 문법  (0) 2016.03.25

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바