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
}
目录
相关文章
|
3月前
|
存储 Go
Golang底层原理剖析之slice类型与扩容机制
Golang底层原理剖析之slice类型与扩容机制
46 0
|
9月前
|
关系型数据库 Go PostgreSQL
golang pgx自定义PostgreSQL类型
golang的pgx驱动提供了大约70种PostgreSQL类型支持,但还是有一些类型没有涵盖,本文介绍如何自己编写代码支持特殊的类型。
121 3
|
10月前
|
安全 Go
Golang 语言的编程技巧之类型
Golang 语言的编程技巧之类型
47 0
|
10月前
|
存储 安全 编译器
Golang 语言中 map 的键值类型选择,它是并发安全的吗?
Golang 语言中 map 的键值类型选择,它是并发安全的吗?
50 0
|
10月前
|
Go
Golang 语言怎么打印结构体指针类型字段的值?
Golang 语言怎么打印结构体指针类型字段的值?
223 0
|
10月前
|
存储 安全 Go
Golang 语言 method 接收者使用值类型和指针类型的区别
Golang 语言 method 接收者使用值类型和指针类型的区别
43 0
|
3月前
|
存储 缓存 Go
Golang底层原理剖析之类型系统,接口与类型断言
Golang底层原理剖析之类型系统,接口与类型断言
69 2
|
3月前
|
存储 编译器 Go
Golang底层原理剖析之string类型与字符编码
Golang底层原理剖析之string类型与字符编码
43 0
|
Go
golang 中string和int类型相互转换
golang 中string和int类型相互转换
95 0