我希望Struct数组具有我稍后在代码中定义的Function的返回值。
在这里,我定义了一个结构“数组”,而info是该结构中所有这些值的数组,我希望info数组中的每个元素都具有我提到的相应值,info.pos应该具有我要传递的字符串的值通过PossibleMoves()函数,info.bitrep应该具有函数converttobit()的返回值,info.numrep应该具有toNumber()的返回值,v1-v8应该具有moves[]数组的值(v1=moves[0])。
我的代码绝对笨拙,有人可以帮忙吗?

package main

import ("bufio"
    "fmt"
    "os"
  "strings")

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

func main() {

file, err := os.Open("chessin.txt")
    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    scanner := bufio.NewScanner(file)
    valid := []bool{}
    for scanner.Scan() {
        b := strings.Split(scanner.Text(), ",")
        valid = append(valid, isvalid(b))
    }
    fmt.Println(valid)
    info :=[64][11]array {
      info.pos = Possiblemoves(pos)
      info.bitrep=coverttobit(num)
       info.numrep=toNumber(string)
       info.v0=moves[0]
       info.v1=moves[1]
       info.v2=moves[2]
       info.v3=moves[3]
       info.v4=moves[4]
       info.v5=moves[5]
       info.v6=moves[6]
       info.v7=moves[7]

    }
}


func convertingtobit( num int){
  n := int64(num)
  bit:=strconv.FormatInt(n, 2)
}




func isvalid(b string) bool {

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


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 PossibleMoves(a string) {
  isvalid := isvalid(a)
 if isvalid == true {
var moves [8]string

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)

fmt.Println("Possible moves are : ",moves)

var PosMoves [8] int


  for i:=0;i<8;i++ {
    if isvalid == true {
    PosMoves[i]=toNumber(moves[i])
  }
}
fmt.Println("After converting : ",PosMoves)

   } else {
    fmt.Println("Invalid Input")
   }
}

最佳答案

简短答案(编译:成功):

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)

10-07 19:03
查看更多