有没有一种方法可以进行“吃过路兵”操作?

huangapple go评论91阅读模式
英文:

Is there a way to cast "en passant"?

问题

假设文件token.txt包含一个字符串。为了读取它,我需要执行以下操作:

byteToken, _ := ioutil.ReadFile("token.txt")
token := string(byteToken)

有没有一种方法可以“自动转换”变量,这样我就不需要使用中间变量来指定要使用的类型?类似于以下代码(当然,这是无效的代码):

string(token), _ := ioutil.ReadFile("token.txt")

关于标题:en passant 是国际象棋中的一种棋步,当你做某个动作时会发生其他事情(对手在你移动棋子时捕获你的兵)- 在这种情况下,我想强调的是转换将在读取调用时完成。

英文:

Suppose that the file token.txt contains a single string. In order to read it, I have to

byteToken, _ := ioutil.ReadFile("token.txt")
token := string(byteToken)

Is there a way to "automatically cast" a variable, so that I do not need to use the intermediate case when I know what type I want to use? Something along the lines of (this is invalid code of course)

string(token), _ := ioutil.ReadFile("token.txt")

About the title: en passant is a chess move where something happens when you do something else (the adversary captures your pawn as you move it) - in this case, I wanted to highlight the fact that the casting would be done as the read call is made.

答案1

得分: 2

你可以使用一个实用函数来实现这个:

func ToString(arr []byte, err error) (string, error) {
  if err != nil {
     return "", err
  }
  return string(arr), nil
}

token, err := ToString(ioutil.ReadFile(...))

上面的代码中,token 是一个字符串。

英文:

You can do that using a utility function:

func ToString(arr []byte, err error) (string, error) {
  if err != nil {
     return "", err
  }
  return string(arr), nil
}

token, err := ToString(ioutil.ReadFile(...))

Above, token is a string.

huangapple
  • 本文由 发表于 2021年6月7日 21:22:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/67872460.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定