类型

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知识精要(二)的更多相关文章

  1. golang知识精要(一)

    一.第一章 命令行参数可通过os.Args访问,os.Args是切片 切片遵循左闭右开原则,如sl[1:3]不包含下标为3的元素 for循环两种方式 方式一: for initial; conditi ...

  2. java知识精要(二)

    java知识精要(一) 集合 Iterable v.s. Iterator 两者都是接口,在Collection继承的是Iterable. Iterable表达了集合具备迭代访问的能力,而Iterat ...

  3. Asp.net mvc 知多少(二)

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  4. Golang中的坑二

    Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...

  5. golang 反射应用(二)

    golang反射应用(二) package test import ( "reflect" "testing" ) //定义适配器 func TestRefle ...

  6. Golang 处理 Json(二):解码

    golang 编码 json 还比较简单,而解析 json 则非常蛋疼.不像 PHP 一句 json_decode() 就能搞定.之前项目开发中,为了兼容不同客户端的需求,请求的 content-ty ...

  7. Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)

    通过两种方式安装 一.通过apt-get安装1.安装 sudo apt-get install golang 2.设置GOPATH变量 GOPATH是扩展库的目录,Go先搜索标准库目录,然后搜索GOP ...

  8. Golang-interface(二 接口与nil)

    github: https://github.com/ZhangzheBJUT/blog/blob/master/nil.md 一 接口与nil 前面解说了go语言中接口的基本用法,以下将说一说nil ...

  9. T-SQL:毕业生出门需知系列(二)

    第2课 检索数据 2.1 SELECT 语句 用途:从一个或多个表中检索数据信息 关键字:作为SQL组成部分的保留字.关键字不能用作表或列的名字. 为了使用SELECT检索表数据,必须至少给出两条信息 ...

随机推荐

  1. Fortify漏洞之Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Finally

    继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: File Separator 和  Poor Error Handling: Return Inside Fina ...

  2. Spring boot配置MongoDB以及Morphia踩坑记录

    pom 因为项目中采用Morphia(MongoDB的ODM框架,对象-文档映射(object-document mapper)),因此需要在pom文件中引入相应依赖: <dependency& ...

  3. 分布式session的解决方案

    1.Nginx的ip_hash,对应tomcat的session,由tomcat保存 缺点:一旦tomcat单点挂机,session消失 2.session在tomcat之间复制, 缺点:保存全局se ...

  4. C++ http服务

    1.需要使用c++提供http服务,本来想使用libevent,但是经过一番搜索后,发现了只需要引用2个文件的mongoose库. 官方文档:https://cesanta.com/docs/over ...

  5. 【MySQL】自增步长调整

    mysql> show variables like '%increment%'; +-----------------------------+-------+ | Variable_name ...

  6. Natas25-writeup

    前言 题目链接: http://natas25.natas.labs.overthewire.org 做这一题花了一些时间,也是由于自己知识点掌握不足,所以分享下解题过程. 题目分析 首先,登录后看到 ...

  7. debug模式不报错,release模式报错

    经常会 char * pMem = new char[icount]; 其中icount为变量,然后对该内存段猛的操作.release编译出来,出现莫名奇妙的错误.但是debug没问题. 后面查了别人 ...

  8. idea安装、配置及基本使用

    下载 下载地址:https://www.jetbrains.com/idea/download/#section=windows Ultimate为旗舰版,功能全面,插件丰富,按年收费. Commun ...

  9. encodeURIComponent() 函数可把字符串作为 URI 组件进行编码

    语法 encodeURIComponent(URIstring) 参数 描述 URIstring 必需.一个字符串,含有 URI 组件或其他要编码的文本. 返回值 URIstring 的副本,其中的某 ...

  10. JDOJ 2175: 忠诚2

    JDOJ 2175: 忠诚2 题目传送门 Description 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让 ...