Go: 分布式学习利器(2)-- Go中的变量,常量 以及与其他语言变量之间的差异
文章目录
- 1. Go 语言编写测试代码
- 2. Go 的变量
- 3. Go 常量定义
1. Go 语言编写测试代码
- 源码文件以
_test
结尾:xxx_test.go
- 测试方法名需以Test开头:
func TESTXXX(t *testing.T) {..}
,且参数列表直接用go 默认的test参数即可
如下first_test.go
代码:
package try_testimport "testing"func TestFirstTry(t *testing.T) { // 套go test的模版t.Log("My first test try") // 在test中打印数据
}
go test first_test.go
普通方式运行
go test -v first_test.go
打印Log
函数的输出
2. Go 的变量
Go语言中的变量与其他编程语言的差异主要如下:
- 赋值可以进行自动类型判断
- 一个赋值语句中可以对多个变量进行同时赋值
查看如下 计算斐波那契数列 的 go 代码
package fib_testimport ("testing"
)func TestFib(t *testing.T) {/*** 普通的变量初始化方式如下** var a int = 1 ** var b int = 1*/// 也可以集中到一块进行初始化var (a int = 1b int = 1)/*** 利用Go语言的自动类型推断** a := 1** b := 1*/t.Log(a)for i :=0; i< 5; i++{t.Log(" ", b)tmp := aa = bb = tmp + a}t.Log(b)
}func TestExchange(t *testing.T) {a := 1b := 2// 交换 a,b的值t.Log(a, " ",b)tmp := aa = bb = tmpt.Log(a, " ",b)/*** go 语言支持对多个变量同时赋值** 如下代码和两个变量交换的结果完全一致*///a,b = b,a//t.Log(a, " ",b)
}
其中变量的赋值可以有很多种形式,尤其是a := 1
是go 相比于其他编译型语言特有的变量类型推断。
同时a, b = b, a
这样的多个变量同时赋值也是比较独特。
运行如上测试代码如下:
▶ go test -v fib_test.go
=== RUN TestFibfib_test.go:21: 1 1fib_test.go:24: 1fib_test.go:26: 1fib_test.go:26: 2fib_test.go:26: 3fib_test.go:26: 5fib_test.go:26: 8fib_test.go:31: 13
--- PASS: TestFib (0.00s)
=== RUN TestExchangefib_test.go:39: 1 2fib_test.go:43: 2 1
--- PASS: TestExchange (0.00s)
PASS
ok command-line-arguments 0.779s
3. Go 常量定义
与其他编程语言的主要差异 是:快速设置连续的值
/*
** 设置递增+1
** 比如Monday是1
** 则其他 Tue = 2, Wed =3 ...
*/
const ( // 关键字,声明常量类型Monday = iota + 1TueWedThursFriSatSun
)/*
** 对bit 位二进制 常量进行连续初始化
**
** Open 表示类似 001
** Close 则依次 010
** Running 表示 100
*/
const (Open = 1 << iotaClose Running
)
编写简单测试代码进行验证:
package fib_testimport ("testing"
)func TestConst(t *testing.T) {const (Mon = iota + 1TueWed)t.Log(Mon," ", Tue, " ", Wed)const (First = 1 << iotaSecondThird)t.Log(First," ", Second, " ",Third)
}
输出如下:
=== RUN TestConstfib_test.go:59: 1 2 3fib_test.go:66: 1 2 4
--- PASS: TestConst (0.00s)
PASS
当然,以上常量赋值主要是针对数值是连续的,如果不连续,则还是按照传统的方式一个一个进行赋值。
const (a = 1b = 12
)
Go: 分布式学习利器(2)-- Go中的变量,常量 以及与其他语言变量之间的差异相关推荐
- Go 分布式学习利器(8)-- Go的函数
文章目录 1. Go语言的函数语法 2. Go 函数中的可变长参数 3. Go函数中的延迟函数 deffer 1. Go语言的函数语法 先介绍一下Go语言的函数和其他语言 函数之间的差异,其中有一些已 ...
- Go 分布式学习利器(16) -- go中可复用的package构建
通过本文,你将了解go 语言中如何将自己的package构建到项目中 以及如何将远程(github)的package构建到项目中. 1. 构建本地的package package 是可复用模块的基本单 ...
- 浅谈分布式学习(SGD)中提高速率的方法
背景: 在分布式学习中,如下图所示,将深度学习中的梯度计算任务分成n份,交给n个从机进行计算,再将计算后的梯度返还到主机,用于模型的更新,这样计算的速度相比于单个主机进行计算,速率得到大大提升.尤其是 ...
- Go 分布式学习利器(11)-- Go语言通过单链表 实现队列
一个小实验,将之前学习的Go相关的语法做个总结. 包括: Go语言接口特性 Go语言封装特性 Go语言 变量,指针,函数 语法 GO语言 条件和循环语句 的语法 GO语言的测试程序 通过链表实现一个队 ...
- Go 分布式学习利器(20)-- Go并发编程之多路选择和超时控制,channel的关闭和广播
Select 多路选择 基本使用语法如下: select {case ret := <-retCh1: //阻塞事件,等待channel1的消息t.Logf("result %s \n ...
- Go 分布式学习利器(10)-- Go语言的接口
文章目录 1. 接口与依赖 2. 自定义类型 1. 接口与依赖 在上一节中我们讨论Go语言的面向对象特性的时候也说了,Go语言并不支持继承,能够进行对象的封装(包括数据成员和成员函数的封装),那么这里 ...
- Go:分布式学习利器(1) -- 开发环境搭建 + 运行第一个go程序
文章目录 为什么要学习 go 开发环境搭建 -- MAC 运行第一个go程序 go 函数的返回值设置 go 函数的命令行参数 为什么要学习 go 在如下几个应用场景的需求下产生了go: 超大规模分布式 ...
- Go 分布式学习利器(19)-- Go并发编程 之 CSP(communicating sequential processes) 机制
文章目录 前言 CSP 特点 CSP代码 演示 1. 正常流程的代码 2. CSP 未设置buffer 代码 3. 设置指定大小的channel buffer 总结 前言 CSP 这个名词大家会比较陌 ...
- Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全
Go语言中通过Groutine 启动一个Go协程,不同协程之间是并发执行的,就像C++/Java中线程之间线程安全是一个常见的问题. 如下Go 语言代码: func TestConcurrent(t ...
最新文章
- 机器学习(15)精确率召回率F1-score(查看癌症预测结果的精确率、召回率)
- 数学各个研究方向简介
- jpa关联映射(一)
- java佳沃维洛奇,新品速递:JAVA 双雄耀世登场
- linux找不到动态链接库 .so文件的解决方法(转自:http://www.cnblogs.com/xudong-bupt/p/3698294.html)
- git did not exit cleanly(解决办法)
- 双端队列 BFS + Chamber of Secrets CodeForces - 173B
- HDU1466 计算直线的交点数
- Linux初级运维(一)——Linux操作系统及常用命令
- 家用计算机的辐射,计算机辐射有多大?
- Python多进程实现原理
- HTTP和HTTPS的区别以及计算机网络常见面试题总结
- matlab dlt标定,实验三 Matlab图像处理基本操作及摄像机标定(DLT)
- 简单代码变出超个性化的QQ昵称
- 善于做“加减法”的百分点科技 成就数据智能的先行者
- Windows7 SP1 OEM 简体中文旗舰版
- el-form 表单的校验
- x86架构鼻祖-i8086
- RGB接口和MPU接口区别
- C语言将一个十进制数转化为二进制
热门文章
- 设计模式之装饰模式(Java实现)
- C++中的explicitkeyword
- 《OpenCV3编程入门》学习笔记2 启程前的认知准备
- PyTorch加载模型model.load_state_dict()问题,Unexpected key(s) in state_dict: “module.features..,Expected .
- java实现fread_fread函数读取到的数据和实际数据不一样
- 如何在html中选择wrap,使用jQuery中的wrap()函数操作HTML元素的教程
- Android 10 vivo,更快更安全,vivo产品经理宣布:iQOO将首批适配Android 10正式版
- Python的神奇功能——函数装饰器MetaClass
- Ubuntu18.04:错误整理
- 力扣(LeetCode)刷题,简单题(第24期)