Golang的short variable declaration
Go中,常规声明方式为
var i, j int
也有一种短的方式
i, j := 1, 2
这种方式相当于
var i, j int
i, j = 1, 2
但是短的方式允许重复声明,条件是必须有一个以上重复
i, j := 1, 2
z, j := 3, 4
i, j := 5, 6 // 报错!
我们来看一段代码:
package main
import (
"fmt"
"os"
)
var cwd string
func init() {
cwd, err := os.Getwd()
if err != nil {
fmt.Printf("error = %s\n", err)
}
fmt.Printf("init: cwd = %s\n", cwd)
}
func main() {
fmt.Printf("main: cwd = %s\n", cwd)
}
运行结果:
jiajun@debian $ go run fun.go
init: cwd = /home/jiajun/test
main: cwd =
为什么cwd明明已经声明成了全局变量却没有被没改变呢?
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block (or the parameter lists if the block is the function body) with the same type, and at least one of the non-blank variables is new.
所以上面的代码想要能正常运行就得:
package main
import (
"fmt"
"os"
)
var cwd string
func init() {
var err error
cwd, err = os.Getwd()
if err != nil {
fmt.Printf("error = %s\n", err)
}
fmt.Printf("init: cwd = %s\n", cwd)
}
func main() {
fmt.Printf("main: cwd = %s\n", cwd)
}
更多文章
本站热门
- socks5 协议详解
- zerotier简明教程
- 搞定面试中的系统设计题
- frp 源码阅读与分析(一):流程和概念
- 用peewee代替SQLAlchemy
- Golang(Go语言)中实现典型的fork调用
- DNSCrypt简明教程
- 一个Gunicorn worker数量引发的血案
- Golang validator使用教程
- Docker组件介绍(二):shim, docker-init和docker-proxy
- Docker组件介绍(一):runc和containerd
- 使用Go语言实现一个异步任务框架
- 协程(coroutine)简介 - 什么是协程?
- SQLAlchemy简明教程
- Go Module 简明教程