Golang随笔之自动类型推导[:=]踩坑

简介: Golang随笔之自动类型推导[:=]踩坑

情景1

这种情况下,已经有了cnt变量,用[:=]的话,就不用在外面定义err了,直接在代码处写即可,此时cnt变量就是var cnt int这个变量,cnt没有因为自动类型推导[:=]而变成新的变量

package main
import "fmt"
func main() {
  var cnt int
  cnt, err := Test()
  if err != nil {
    return
  }
  fmt.Println(cnt)
}
func Test() (int, error) {
  return 0, nil
}

情景2

这种情况下,for有个大括号,可以看作 作用域,在for里面cnt, err := Test()的cnt和var cnt int是两个不同的变量,因为for的大括号多了个作用域

func main() {
  var cnt int
  for {
    cnt, err := Test()
    if err != nil {
      return
    }
    fmt.Println(cnt)
  }
  fmt.Println(cnt)
}
func Test() (int, error) {
  return 0, nil
}

总结

若想在for中用外层的局部变量,又想赋值给err,干脆外层也定义一个err出来,这样内外用的都是同一个变量,用等号赋值即可

package main
import "fmt"
func main() {
  var cnt int
  var err error
  for {
    cnt, err = Test()
    if err != nil {
      return
    }
    fmt.Println(cnt)
  }
  fmt.Println(cnt)
}
func Test() (int, error) {
  return 0, nil
}
目录
相关文章
|
6月前
|
存储 Go
Golang底层原理剖析之slice类型与扩容机制
Golang底层原理剖析之slice类型与扩容机制
76 0
|
关系型数据库 Go PostgreSQL
golang pgx自定义PostgreSQL类型
golang的pgx驱动提供了大约70种PostgreSQL类型支持,但还是有一些类型没有涵盖,本文介绍如何自己编写代码支持特殊的类型。
|
安全 Go
Golang 语言的编程技巧之类型
Golang 语言的编程技巧之类型
62 0
|
存储 安全 编译器
Golang 语言中 map 的键值类型选择,它是并发安全的吗?
Golang 语言中 map 的键值类型选择,它是并发安全的吗?
70 0
|
2月前
|
Go
Golang语言基础之接口(interface)及类型断言
这篇文章是关于Go语言中接口(interface)及类型断言的详细教程,涵盖了接口的概念、定义、实现、使用注意事项以及类型断言的多种场景和方法。
38 4
|
2月前
|
Go
Golang语言基础数据类型之字符类型
这篇文章介绍了Go语言中的字符类型,包括字符概述、byte和rune类型的定义、转义字符的使用以及如何遍历字符串获取字符的示例。
17 0
|
Go
Golang 语言怎么打印结构体指针类型字段的值?
Golang 语言怎么打印结构体指针类型字段的值?
265 0
|
存储 安全 Go
Golang 语言 method 接收者使用值类型和指针类型的区别
Golang 语言 method 接收者使用值类型和指针类型的区别
54 0
|
6月前
|
存储 缓存 Go
Golang底层原理剖析之类型系统,接口与类型断言
Golang底层原理剖析之类型系统,接口与类型断言
92 2
|
6月前
|
存储 编译器 Go
Golang底层原理剖析之string类型与字符编码
Golang底层原理剖析之string类型与字符编码
59 0