2012-06-22 3 views
4

유형을 정의하고 있습니다. 나는 Go가 uint8이라는 타입과 uint8 값을 생성하는 uint8이라는 함수를 가지고 있다는 것을 알아 차렸다. 나 자신이 작업을 수행 할 때Go에 내 자신의 형식 변환기를 정의하려면 어떻게합니까?

는하지만 :

12: type myType uint32 

14: func myType(buffer []byte) (result myType) { ... } 

을 내가 작동 func newMyType로 변경하면 나는 오류

./thing.go:14: myType redeclared in this block 
    previous declaration at ./thing.go:12 

를 얻을 수 있지만 두 번째 클래스 것 같은이 느낌 시민. 형식 유형과 동일한 ID를 사용하여 형식 생성자 함수를 작성할 수 있습니까?

답변

5

uint8()은 기능이나 생성자가 아니지만 type conversion입니다.

원시 유형 (또는 다른 명백한 변환은 있지만 정확한 법을 알지 못합니다)의 경우 생성자를 만들 필요가 없습니다.

당신은 간단하게이 작업을 수행 할 수 있습니다

type myType uint32 
v := myType(33) 

을 당신이 당신의 가치를 만들 때, 당신이 "할"기능을 이용해야 할 작업이있는 경우 : 함수 명명

package main 

import (
    "fmt" 
    "reflect" 
) 

type myType uint32 

func makeMyType(buffer []byte) (result myType) { 
    result = myType(buffer[0]+buffer[1]) 
    return 
} 

func main() { 
    b := []byte{7, 8, 1} 
    c := makeMyType(b) 
    fmt.Printf("%+v\n", b) 
    fmt.Println("type of b :", reflect.TypeOf(b)) 
    fmt.Printf("%+v\n", c) 
    fmt.Println("type of c :", reflect.TypeOf(c)) 
} 

newMyType 만해야 포인터를 반환 할 때 사용됩니다.

+0

변환에는 약간의 twiddling이 필요합니다. C 스타일의 캐스트보다 생성자가 더 많을 것입니다. 아마 타입 변환은 내가 원하는 것이 아닙니다. – Joe

+0

BTW 내 예제에서는'[] byte '가 필요하다고 말했습니다. – Joe

+0

내가 두려워했던 것처럼. 메르시! – Joe

관련 문제