golang知识精要(二)
类型
go是**静态类型**语言,不能在运行期改变变量类型。
变量定义
- 使用var定义变量,自动初始化为零值;
- 如果提供初始值,可省略变量类型;
- 函数内部可使用:=定义变量。
var x int // 自动初始化为0
var f float32 = 1.6
var s = "abc"
func main(){
x := 123
}
多变量
- 可一次定义多个变量;
- 多变量赋值时,先计算所有相关值,然后再从左到有依次赋值。
var x, y, z int
var s, n = "abc", 123
data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100 //(i=0) -> (i=2), (data[0]=100)
const
- 常量值必须是编译期可确定的数字、字符串、布尔值
const (
s = "abc"
x // x = "abc" 常量组中,如不提供类型和初始值,那么与上一常量相同
b = len(a)
c = unsafe.Sizeof(b) // 可以使用len, cap, unsafe.Sizeof等编译器可确定结果的函数返回值
)
枚举
const (
Sunday = iota // 0
Monday // 1
..
)
const (
_ = iota // iota =0
KB int64 = 1 << (10 * iota) // iota = 1
MB // 与KB表达式相同,但iota = 2
GB
)
变量默认值
| 类型 | 默认值 | 长度 |
|---|---|---|
| bool | false | 1 |
| byte | 0 | 1 |
| rune | 0 | 4 |
| int/uint | 0 | - |
| float* | 0.0 | - |
| string | "" | - |
| slice / map / channel | nil | - |
| interface/function | nil | - |
| array / stuct | - | - |
类型转换
- 不支持隐式转换
var b byte = 100
var n int = (int)(b) // 显示转换,建议(type)
a := 100
if a { // 不能使用其他类型当bool使用
println("true")
}
指针
与c类似,略。
数组
var a [4]int = [4]int{1,2} //未初始化的元素将被赋为零值
var b = [...]string{"hello"} //长度为1
c := [...]int{99:-1} //定义了100个元素,最后一个初始化为-1
说明
- 如果数组的元素类型是可以互相比较的,那么数组类型也可以互相比较
- 当两个数组的所有元素相等,那么数组相等
表达式
range
[注意事项](https://studygolang.com/articles/12958)
switch
- 可省略break,默认自动终止。
x := []int{1, 2, 3}
i := 2
switch i {
case x[1]:
println("a") // 自动终止
case ..
}
switch { // 可省略条件
case x > 0 :
...
}
switch i := 2; { // 带初始化语句
...
}
golang知识精要(二)的更多相关文章
- golang知识精要(一)
一.第一章 命令行参数可通过os.Args访问,os.Args是切片 切片遵循左闭右开原则,如sl[1:3]不包含下标为3的元素 for循环两种方式 方式一: for initial; conditi ...
- java知识精要(二)
java知识精要(一) 集合 Iterable v.s. Iterator 两者都是接口,在Collection继承的是Iterable. Iterable表达了集合具备迭代访问的能力,而Iterat ...
- Asp.net mvc 知多少(二)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- Golang中的坑二
Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...
- golang 反射应用(二)
golang反射应用(二) package test import ( "reflect" "testing" ) //定义适配器 func TestRefle ...
- Golang 处理 Json(二):解码
golang 编码 json 还比较简单,而解析 json 则非常蛋疼.不像 PHP 一句 json_decode() 就能搞定.之前项目开发中,为了兼容不同客户端的需求,请求的 content-ty ...
- Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)
通过两种方式安装 一.通过apt-get安装1.安装 sudo apt-get install golang 2.设置GOPATH变量 GOPATH是扩展库的目录,Go先搜索标准库目录,然后搜索GOP ...
- Golang-interface(二 接口与nil)
github: https://github.com/ZhangzheBJUT/blog/blob/master/nil.md 一 接口与nil 前面解说了go语言中接口的基本用法,以下将说一说nil ...
- T-SQL:毕业生出门需知系列(二)
第2课 检索数据 2.1 SELECT 语句 用途:从一个或多个表中检索数据信息 关键字:作为SQL组成部分的保留字.关键字不能用作表或列的名字. 为了使用SELECT检索表数据,必须至少给出两条信息 ...
随机推荐
- java--修饰符与常用规则
修饰符总结 修饰符 类 成员变量 成员方法 构造方法 public Y Y Y Y default Y Y Y Y protected Y Y Y private Y Y Y abstract Y Y ...
- c# 根据域名的到对应的IP
今天做了域名解析,由于项目里要用到域名对应的ip 所以做了这个小程序 private void button_Net_Click(object sender, EventArgs e) ...
- Java进程间通信学习
转自:https://www.iteye.com/blog/polim-1278435 进程间通信的主要方法有:(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共 ...
- spoon数据转换中文乱码(kettle)
(1) 查看mysql数据库是否为utf8(status) (2) 设置spoon (3) 文本打开spoon.bat,找到set OPT=%OPT% %PENTAHO_DI_JAVA_OPTIONS ...
- lua 的匹配规则
匹配规则 .(点): 与任何字符配对 %a: 与任何字母配对 %c: 与任何控制符配对(例如\n) %d: 与任何数字配对 %l: 与任何小写字母配对 %p: 与任何标点(punctuation)配对 ...
- 用肘方法确定 kmeans 聚类中簇的最佳数量
说明: KMeans 聚类中的超参数是 K,需要我们指定.K 值一方面可以结合具体业务来确定,另一方面可以通过肘方法来估计.K 参数的最优解是以成本函数最小化为目标,成本函数为各个类畸变程度之和,每个 ...
- matplotlib 绘制正余弦曲线图
1.普通风格 代码 import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0, 2*np.pi, 50)y1 = np.s ...
- Java精通并发-Condition详解及相比于传统线程并发模式的改进
在上一次https://www.cnblogs.com/webor2006/p/11792954.html对于Lock的具体实现类ReentrantLock用了一个示例对它进行了一个简单的了解,而它其 ...
- 监控进程cpu meminfo
https://github.com/cdrandin/cpsc_351 https://github.com/cdrandin?after=Y3Vyc29yOnYyOpK5MjAxNC0wNy0xM ...
- swiper使用总结-坑点汇总
1.开发中遇到个坑,ScrollableTabView(选项卡)+swiper(轮播图)在安卓下,初始化的第一页不会渲染,需要在ScrollableTabView挂载完毕后再渲染swiper. 解决方 ...