博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[日常] go语言圣经-声明,变量,赋值,类型,包和文件习题
阅读量:7119 次
发布时间:2019-06-28

本文共 2549 字,大约阅读时间需要 8 分钟。

go语言圣经-声明

1.四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明
2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名字就只能在函数内部很小的范围被访问

go语言圣经-变量

1.var 变量名字 类型 = 表达式
2.零值初始化机制,数值类型零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil
3.同时声明一组变量,用逗号分隔
4.简短变量声明 := ,只有对已经在同级词法域声明过的变量才和赋值操作语句等价
5.一个指针的值是另一个变量的地址,指针名字为p,那么可以说“p指针指向变量x”,或者说“p指针保存了x变量的内存地址”
6.聚合类型每个成员,可以被取地址
7.函数返回局部变量的地址也是安全的
8.将指针作为参数调用函数,那将可以在函数中通过该指针来更新变量的值。
9.我们对一个变量取地址,或者复制指针,我们都是为原变量创建了新的别名
10.指针是实现标准库中flag包的关键技术,它使用命令行参数来设置对应变量的值
11.另一个创建变量的方法是调用用内建的new函数,new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为*T
12.变量的生命周期指的是在程序运行期间变量有效存在的时间间隔
13.从每个包级的变量和每个当前运行函数的每一个局部变量开始,通过指针或引用的访问路径遍历,是否可以找到该变量。如果不存在这样的访问路径,那么说明该变量是不可达的,也就是说它是否存在并不会影响程序后续的计算结果
14.一个循环迭代内部的局部变量的生命周期可能超出其局部作用域。同时,局部变量可能在函数返回之后依然存在。
15.局部变量从函数中逃逸,该局部变量必须在堆上分配

go语言圣经-赋值

1.元组赋值是另一种形式的赋值语句,它允许同时更新多个变量的值,用法交换两个变量的值
2.最大公约数(GCD算法),计算斐波纳契数列(Fibonacci)的第N个数 更加简洁
3.表达式太复杂的话,应该尽量避免过度使用元组赋值;调用一个有多个返回值的函数,可以使用元组赋值,额外的返回值来表达某种错误类型,可以用下划线空白标识符_来丢弃不需要的值
4.程序中还有很多地方会发生隐式的赋值行为:函数传参,复合类型的字面量

go语言圣经-类型

1.type 类型名字 底层类型 类型声明语句
2.类型声明语句一般出现在包一级,因此如果新创建的类型名字的首字符大写,则在外部包也可以使用
3.命名类型还可以为该类型的值定义新的行为
4.许多类型都会定义一个String方法,因为当使用fmt包的打印方法时,将会优先使用该类型对应的String方法返回的结果打印
5.显式转型操作,每一个类型T,都有一个对应的类型转换操作T(x),用于将x转为T类型

go语言圣经-包和文件

1.Go语言中的包和其他语言的库或模块的概念类似,目的都是为了支持模块化、封装、单独编译和代码重用
2.每个包都对应一个独立的名字空间
3.如果一个名字是大写字母开头的,那么该名字是导出的

 

练习 2.1: 向tempconv包添加类型、常量和函数用来处理Kelvin绝对温度的转换,Kelvin 绝对零度是−273.15°C,Kelvin绝对温度1K和摄氏度1°C的单位间隔是一样的。

1.设置GOPATH

export GOPATH=$HOME/gobook
2.
将要导入的包源代码放在 GOPATH/src/包名 这个目录下

/home/ubuntu/gobook/src/tempconv/tempconv.go 

package tempconvimport(        "fmt")//摄氏度类型声明type Ce float64//Kelvin类型type Kelvin float64//常量声明const (        FreezingK Kelvin=0// 结冰点温度        Boilingk Kelvin=100// 沸水温度        AbsoluteZeroK Kelvin=-273.15//Kelvin的绝对零度)//摄氏度转成Kelvinfunc CtoK(c Ce) Kelvin{        c=c+273.15        //显式类型转换        return Kelvin(c)}//Kelvin转成摄氏度func KtoC(k Kelvin) Ce{         k=k-273.15        //显式类型转换        return Ce(k)}//类型的String方法func (c Ce)String() string{        return fmt.Sprintf("%g °c",c)}//Kelvin类型的String方法func (k Kelvin)String() string{        return fmt.Sprintf("%g °k",k)}

test.go导入调用上面的包

package mainimport(        "tempconv"        "fmt")func main(){        //练习 2.1: 向tempconv包添加类型、常量和函数用来处理Kelvin绝对温度的转换,Kelvin 绝对零度是−273.15°C,Kelvin绝对温度1K和摄氏度1°C的单位间隔是一样的。        //显式类型转换        a:=tempconv.Ce(tempconv.AbsoluteZeroK)        b:=tempconv.CtoK(a)        fmt.Println(b)        c:=tempconv.KtoC(100)        fmt.Println(c)}

  

  

转载于:https://www.cnblogs.com/taoshihan/p/8746659.html

你可能感兴趣的文章
JQ选择器总结
查看>>
spine动画融合与动画叠加
查看>>
get请求和post请求有什么区别
查看>>
jQuery 点击div, 向上展示内容
查看>>
行为树 学习笔记
查看>>
增量式 爬虫
查看>>
JOptionPane
查看>>
map按照value排序的方法
查看>>
[MAC OS] 解压Assets.car获取资源图片
查看>>
操作系统IO模型
查看>>
mvc4 中的 AuthorizeAttribute
查看>>
oracle 建实例异常:进度停留在2%、内存占用不断增大。环境:winserver2008 r2、8核16线程...
查看>>
C++ 的对象模型
查看>>
[下载地址] Maven - 插件(附详细配置_阿里版)
查看>>
web.xml配置详解之listener与context-param
查看>>
Spring的bean管理--注解和配置文件混合使用
查看>>
-save-dev 与 -save的区别
查看>>
TypeError: $(…).tooltip is not a function
查看>>
php count()函数用法 及其 一个坑
查看>>
Qt可扩展窗口实现
查看>>