在go lang

时间:2016-02-02 13:30:13

标签: go go-imagick

我正在尝试使用以下代码将字符串转换为32位ubuntu上的uint。但是它始终在uint64中转换它,尽管在函数中明确地传递了32作为参数。下面的代码mw是image magick库的对象。在调用uintmw.getImageWidth()时返回mw.getImageHeight()。此外,它接受resize函数中的uint类型参数。

    width :=  strings.Split(imgResize, "x")[0]
    height := strings.Split(imgResize, "x")[1]

    var masterWidth uint = mw.GetImageWidth() 
    var masterHeight uint = mw.GetImageHeight() 

    mw := imagick.NewMagickWand()
    defer mw.Destroy()

    err = mw.ReadImageBlob(img)
    if err != nil {
            log.Fatal(err)
        } 

    var masterWidth uint = mw.GetImageWidth() 
    var masterHeight uint = mw.GetImageHeight()

    wd, _ := strconv.ParseUint(width, 10, 32)
    ht, _ := strconv.ParseUint(height, 10, 32)

   if masterWidth < wd || masterHeight < ht { 
     err = mw.ResizeImage(wd, ht, imagick.FILTER_BOX, 1)
     if err != nil {
        panic(err)
    } 
   }

错误是:

# command-line-arguments
test.go:94: invalid operation: masterWidth < wd (mismatched types uint and uint64)
goImageCode/test.go:94: invalid operation: masterHeight < ht (mismatched types uint and uint64)
goImageCode/test.go:100: cannot use wd (type uint64) as type uint in argument to mw.ResizeImage
goImageCode/AmazonAWS.go:100: cannot use ht (type uint64) as type uint in argument to mw.ResizeImage

1 个答案:

答案 0 :(得分:13)

  

Package strconv

     

func ParseUint

func ParseUint(s string, base int, bitSize int) (n uint64, err error)
     

ParseUint与ParseInt类似,但对于无符号数字。

     

func ParseInt

func ParseInt(s string, base int, bitSize int) (i int64, err error)
     

ParseInt解释给定基数(2到36)中的字符串s并返回   相应的值i。如果base == 0,则表示基数   string的前缀:base 16为&#34; 0x&#34 ;, base 8为&#34; 0&#34;和base 10   否则。

     

bitSize参数指定结果必须的整数类型   适合。位大小0,8,16,32和64对应于int,int8,   int16,int32和int64。

     

ParseInt返回的错误具有具体类型* NumError和   包括err.Num = s。如果s为空或包含无效数字,则为err.Err   = ErrSyntax,返回值为0;如果对应于s的值不能用给定大小的有符号整数表示,则为err.Err   = ErrRange,返回值是相应bitSize和sign的最大幅度整数。

bitSize参数指定结果必须的整数类型 适合。 uint类型大小是实现定义的,32位或64位。 ParseUint返回类型始终为uint64。例如,

package main

import (
    "fmt"
    "strconv"
)

func main() {
    width := "42"
    u64, err := strconv.ParseUint(width, 10, 32)
    if err != nil {
        fmt.Println(err)
    }
    wd := uint(u64)
    fmt.Println(wd)
}

输出:

42