在Golang

时间:2016-08-11 03:01:42

标签: arrays function go struct return-value

我希望Struct数组具有稍后在代码中定义的函数I的返回值 在这里我定义了一个struct" array"和info是结构中所有这些值的数组,我希望info数组中的每个元素都具有我提到的相应值,info.pos应该具有字符串I' m通过函数的值PossibleMoves()info.bitrep应具有函数converttobit()的返回值,info.numrep的返回值应为toNumber()v1 - { {1}}应该包含v8数组的值,(moves[]) 我的代码肯定会有人帮忙笨拙吗?

v1=moves[0]

2 个答案:

答案 0 :(得分:0)

简答(编译:成功):

package main

import "fmt"

type array struct {
    pos                                    string
    bitrep                                 int64
    numrep, v1, v2, v3, v4, v5, v6, v7, v8 int8
}

func toNumber(s string) int8 {
    if len(s) != 2 {
        fmt.Println("Invalid Input", s, ".")
    }
    num := int8(s[0]-'A')*8 + int8(s[1]-'0')
    return num
}

func PossibleMoves(out *array, a string) {
    out.v1 = toNumber(string(a[0]+1) + string(a[1]+2))
}

func main() {
    info := &array{
        pos:    "A1",
        bitrep: 1,
    }
    PossibleMoves(info, "")
}

存在一些问题:

代码中的

1-使用:=代替=代替新代数:

func toNumber(s string) int {    
    if len(s) != 2 {
       fmt.Println("Invalid Input",s,".") 
       } 
      num=int(s[0]-'A')*8 + int(s[1]-'0')
      return num
}

像这样:

func toNumber(s string) int {
    if !isvalid(s) {
        panic("Invalid Input" + s + ".")
    }
    num := int(s[0]-'A')*8 + int(s[1]-'0')
    return num
}

2-你的代码:

func isvalid(b string) bool {

  if  b[0]<='H' && b[0]>='A' && b[1]<='8' && b[1]>='0' {
    return true
      }
  return false
}

像这样检查len(b) == 2

func isvalid(b string) bool {
    if len(b) == 2 && b[0] <= 'H' && b[0] >= 'A' && b[1] <= '8' && b[1] >= '1' {
        return true
    }
    return false
}

3-尽量不要复制粘贴:

moves[0]=string(a[0]+1)+string(a[1]+2)
moves[1]=string(a[0]+1)+string(a[1]-2)
moves[2]=string(a[0]-1)+string(a[1]+2)
moves[3]=string(a[0]-1)+string(a[1]-2)
moves[4]=string(a[0]+2)+string(a[1]+1)
moves[5]=string(a[0]+2)+string(a[1]-1)
moves[6]=string(a[0]-2)+string(a[1]+1)
moves[7]=string(a[0]-2)+string(a[1]-1)

答案 1 :(得分:0)

回答确切的问题:

type array struct{
  pos string
  bitrep int64
  numrep,v1,v2,v3,v4,v5,v6,v7,v8 int8
}

func PossibleMoves(out *array, a string) {
  out.v1 = tonumber(string(a[0]+1) + string(a[1]+2))
  // ...
}

func main() {
  // ...
  info := &array{
    pos: "...",
    bitrep: 1234,
  }
  PossibleMoves(info, line)
}

但不是这个小细节,请专注于@Amd的答案。