文档章节

go的赋值与声明语法糖

刘地
 刘地
发布于 2013/07/29 21:35
字数 324
阅读 122
收藏 0
:= 只有在左侧有未定义变量时才能使用(有定义的变量也可以)
:= 只进行语义上的检查,循环内也可以使用,第一次之后的效果和=相同
:= 和 = 都要求左右的值和变量一一对应,不会截断
特殊情况,map、chan、类型推定可以返回一个值,也可以是两个值
当map中该键不存在时,总是返回零值和false,否则后者返回true

当chan关闭以后,总是返回零值和false,否则后者返回true

package main

type INT int

func (r *INT) show() {
	println(int(*r))
}

func A() (INT, INT) {
	return 1, 2
}

func B() (INT, bool) {
	return 3, true
}

func C() (INT, error) {
	return 4, nil
}

func D(i <-chan int,o chan<- int) {
	x := <- i
	println(x)
	y,z := <- i
	println(y,z)
	o <- 1
}

func main() {
	
	var t INT
	t.show()
	
	a,b:=A()
	// a := A() /*报错*/
	// t = A()  /*报错*/
	println(a,b)
	
	a,c:=B()
	// c := B() /*报错*/
	// t = B()  /*报错*/
	println(a,c)
	
	a,d:=C()
	// d := C() /*报错*/
	// t = C()  /*报错*/
	println(a,d)
	
	// A().show() /*报错*/
	// B().show() /*报错*/
	// C().show() /*报错*/
	
	m:=map[int]int{1:1}
	i:=m[1]
	println(i)
	j,k:=m[7]
	println(j,k)
	
	u:=make(chan int)
	v:=make(chan int)
	go D(u,v)
	u <- 1
	u <- 2
	<- v
	close(u)
	close(v)
	y,z := <- u
	println(y,z)
}
// 0
// 1 2
// 3 true
// 4 (0x0,0x0)
// 1
// 0 false
// 1
// 2 true
// 0 false

© 著作权归作者所有

共有 人打赏支持
刘地
粉丝 100
博文 52
码字总数 69858
作品 1
朝阳
私信 提问
Kotlin委托属性-简化数据访问

一、概述 Kotlin有很多语法糖,最近看了委托属性, 用于改造笔者的开源组件LightKV, 确实提高了不少易用性。 关于LightKV,笔者在上一篇文章《LightKV-高性能key-value存储组件》中有介绍其原...

horizon757
11/03
0
0
[iOS、Unity、Android] 浅谈闭包的使用方法

前言 我们经常所编程语言的的进步速度是落后于硬件的发展速度的。 但是最近几年,闭包语法在各个语言中都有自己的体现形式,例如   •  C语言中使用函数指针作为回调函数的入口;   •...

浩浩老师
2015/09/07
43
0
Python装饰器

装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。下面就一步步看看Python中的装...

萌面道人
2017/11/09
0
0
兄弟来开车 我们一起学Kotlin 基础一

前言 就是一点基础的东西东西,比如修饰符、循环等 如何创建一个变量或常量 变量创建之严谨的创建变量 这句代码意思是 创建一个变量(var)名字叫name类型是String类型,她的值是“李明”,是...

no白菜
06/12
0
0
ES6新增核心语法一览

let 和const let不可以声明前置 let不可以重复声明 存在块级作用域 这样就可以替换掉原来IIFE的写法 const 声明的常量不可以改变 适用于let的也同样适用于const 解构赋值 数组的解构(用来给...

Monettt
2017/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自定义 Maven 的 repositories

有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到。此时,就需要 自定义Maven的<repositories>。 ...

waylau
25分钟前
1
0
徒手写一个es6代码库

mkdir democd demonpm initnpm install -g babelnpm install -g babel-clinpm install --save-dev babel-preset-es2015-node5 在项目目录创建两个文件夹 functional-playground ......

lilugirl
26分钟前
1
0
linux定位应用问题的一些常用命令,特别针对内存和线程分析的dump命令

1.jps找出进程号,找到对应的进程号后面才好继续操作 2.linux查看进程详细信息 ps -ef | grep 进程ID 3. dump内存信息 Jmap -dump:format=b,file=YYMMddhhmm.dump pid 4.top查看cpu占用信息 ...

noob_chr
26分钟前
1
0
Android TV开发-按键焦点

写在前面 按键焦点过程了解 2.1 dispatchKeyEvent 过程了解 2.2 焦点查找请求过程了解 1.2.1 第一次获取焦点 1.2.3 按键焦点 焦点控制 焦点记忆 应用场景 参考资料 [TOC] 1. 写在前面 工...

冰雪情缘l
26分钟前
1
0
java框架学习日志-3

这章主要是补充一些ioc创建对象的方式,ioc容器在写好<bean></bean>的时候就已经创建对象了。在之前的例子中,一直都是无参的构造方法。下面给出有参的构造方法的对象的创建,没有什么难点重...

白话
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部