golang知识精要(二)
2024-09-01 12:47:07
类型
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; { // 带初始化语句
...
}
最新文章
- 纯CSS打造忙碌光标
- BZOJ3631: [JLOI2014]松鼠的新家
- 动态获取R.drawable.xx资源
- 分享在winform下实现左右布局多窗口界面
- C#--异步显示工作进度
- CentOS加载U盘
- data and dream
- Spark源码系列(八)Spark Streaming实例分析
- codevs3731 寻找道路
- UVA_303_Pipe_(计算几何基础)
- pip安装 MySQLDb 和 Django
- maven中tomcat7-maven-plugin插件的使用
- HTML5 Shiv – 让该死的IE系列支持HTML5吧(转)
- br与p标签区别
- asp.net2.0安全性(2)--用户个性化设置(1)--转载来自车老师
- Spring Cloud Alibaba基础教程:Sentinel使用Nacos存储规则
- Python3创建项目时创建了一个叫做“keyword";的包,运行项目时报ImportError: cannot import name &#39;iskeyword&#39;错误
- 深入Java集合学习系列:LinkedHashMap的实现原理
- 关于iframe跨域实践
- c/c++中int main(int argc,char *argv[])的具体含义
热门文章
- navicat mysql 书写存储过程并导出成sql
- JMETER 使用JDBC查找数据作为参数
- 指针专题6-空指针NULL和void指针
- 【servlet】Servlet的API和生命周期]
- 逆向破解之160个CrackMe —— 022
- SSH端口转发之本地转发
- jquery的select 2库,如果用js代码刷新选项?
- 201871010134-周英杰《面向对象程序设计(Java)》第四周学习总结
- C#中的函数(一) 无参无返回值的函数
- Browse Princeton&#39;s Series (by Date) in Princeton Economic History of the Western World