[Journey with golang] 7. Traps

golang语法简单,类型系统短小精悍,但也不是完美无瑕的。golang也有一些特性让初学者感到困惑。本文介绍golang的语言陷阱,并介绍golang源码书写的惯用方法。

golang支持多值赋值,在函数或方法内部也支持短变量声明并复制,同时golang依据类型字面量的值能够自动进行类型推断。可以一次性声明多个变量,并可以在声明时赋值,而且可以省略类型,但必须遵守一定的规则要求。具体看下面的示例:

 1 package main
 2
 3 import "fmt"
 4
 5 func main() {
 6     // 相同类型的变量可以在末尾加上类型
 7     var a, b int = 1, 2
 8     // 如果不带上类型,编译器可以自动推断
 9     var c, d, e = "haha", 3.14, 2
10     // 不同类型的变量声明和隐式初始化可以使用如下语法
11     var (
12         x int
13         y string
14     )
15     // 注意,多值赋值语句中每个变量后面都不能带上类型
16     fmt.Println(a, b, c, d, e, x, y)
17 }

多值赋值有两种格式。一种是右边是一个返回多值的表达式,可以说返回多值的函数调用,也可以是range对map、slice等函数的操作,还可以是类型断言。

原文地址:https://www.cnblogs.com/JHSeng/p/12246120.html

时间: 2024-10-05 20:09:47

[Journey with golang] 7. Traps的相关文章

[Journey with golang] 0. Planning for the New year and new journey

最近由于一些事务,开始写golang.由于golang本身的简洁性和易用性(当然,它还是一门强类型语言),让我感觉这门语言不仅有趣,而且具有很高的实用性. 为了进一步系统学习这门语言,元旦期间我将每天更新博客,权当golang知识点复习(反正在家也是无聊). 关于golang的书籍,个人推荐李文塔的<Go语言核心编程>和最权威的<The Go Programming Language>. 时间仓促,水平所限,难免有错.欢迎大家批评指正. 原文地址:https://www.cnblo

[Journey with golang] 1. Basic knowledge

这一章介绍golang的一些基础知识.golang写起来跟c++很不一样,在我看来,它更像是c++/java/python的混合体,再经过一系列增删之后的东西. golang最大的特点就是简洁,仅有25个关键字:它虽然是一门静态语言,但支持运行时动态类型:它不仅是强类型语言,还支持隐式类型推导.golang不支持泛型,但支持反射.golang自带gc,并原生支持协程. 1 package main 2 3 import "fmt" 4 5 func main() { 6 fmt.Pri

[Journey with golang] 3. Type system

golang的类型分为命名类型和未命名类型.命名类型包含预声明类型,可以通过标识符表示,用户自定义类型也是命名类型.未命名类型由预声明类型.关键字和操作符组合而成.未命名类型又称为类型字面量.array/slice/map/channel/pointer/function/struct/interface都属于类型字面量.其中,struct和interface是不使用type定义的那种. 未命名类型和类型字面量是等价的,通常所述的golang基本类型中的复合类型就是类型字面量,所以未命名类型.类

[Journey with golang] 8. Project Management

本文介绍一些关于golang工程管理相关的东西.首先介绍golang一些重要的环境变量,有关golang的环境变量可以用以下命令查看: go env $GOROOT:golang安装根目录.Linux下默认是/usr/lib/go.如果$GOROOT位于上述位置,则不需要显式设置该环境变量,反之需要设置. $GOPATH:golang工作目录(workspace).默认值为$HOME/go. $GOBIN:是带有main函数的源程序执行 go install 时生成的可执行程序安装目录,默认是$

[转]50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs

http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/ 50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs Go is a simple and fun language, but, like any other language, it has a few gotchas... Many of those gotc

The Go Blog Getting to Go: The Journey of Go&#39;s Garbage Collector

Getting to Go: The Journey of Go's Garbage Collector https://blog.golang.org/ismmkeynote The Go Blog Getting to Go: The Journey of Go's Garbage Collector 原文地址:https://www.cnblogs.com/yuanjiangw/p/12179561.html

golang []byte转string

golang中,字符切片[]byte转换成string最简单的方式是 package main import ( "fmt" _ "unsafe" ) func main() { bytes := []byte("I am byte array !") str := string(bytes) bytes[0] = 'i'//注意这一行,bytes在这里修改了数据,但是str打印出来的依然没变化, fmt.Println(str) } 打印信息:

golang实现Ringbuf

Ring buffer算法优点:高内存使用率,在缓冲buffer内存模型中,不太容易发生内存越界.悬空指针等 bug ,出了问题也容易在内存级别分析调试.做出来的系统容易保持健壮. package main import ( "bytes" "fmt" ) type Ringbuf struct { buf         []byte start, size int } func New(size int) *Ringbuf { return &Ringb

Golang Hash MD4

//Go标准包中只有MD5的实现 //还好,github上有MD4实现. package main import (     "golang.org/x/crypto/md4"     "encoding/hex"     "fmt" ) func get_md4(buf []byte) ([] byte) { ctx := md4.New() ctx.Write(buf) return ctx.Sum(nil) } func main() {