《读书笔记系列》 《The Way to Go》中文译本 知识点整理

scotth · 2015-10-10 03:00:23 · 1800 次点击 · 预计阅读时间 3 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2015-10-10 03:00:23 的文章,其中的信息可能已经有所发展或是发生改变。

学习某个语言后,忽然停用个半年的,很容易就忘记。又要重新学习!

所以为了快速 学习+回顾 golang,做了这个概要整理

先说下golang资料整理

The Way to Go 中文译本


4.2.1 包的概念、导入与可见性

你必须在源文件中非注释的第一行指明这个文件属于哪个包
    如:package main。  package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

包名只能是  小写字母
如果对一个包进行更改或重新编译,所有引用了这个包的客户端程序都必须全部重新编译。

导入包的写法

    //method 1
    import "fmt"
    import "os"

    //method 2
    import "fmt";import "os"

    //method 3
    import ("fmt"; "os")

    //method 4
    import (
    "fmt"
    "os"
    )

可见性规则

当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,
    如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);

标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )。

Group1 (首字母 大写 ,作用域 public )
group1 (首字母 小写 ,作用域 private )

注意事项
如果你导入了一个包却没有使用它,则会在构建程序时引发错误,如 imported and not used: os,这正是遵循了 Go 的格言:“没有不必要的代码!“。

包的分级声明和初始化
你可以在使用 import 导入包之后定义或声明 0 个或多个常量(const)、变量(var)和类型(type),这些对象的作用域都是全局的(在本包范围内),所以可以被本包中所有的函数调用(如 gotemplate.go 源文件中的 c 和 v),然后声明一个或多个函数(func)。


变量定义

type IZ int

type (
   IZ int
   FZ float64
   STR string
)

var a IZ = 5

var obj type = xxx
var
 

4.2.2 函数

左大括号 { 必须与方法的声明放在同一行,这是编译器的强制规定,否则你在使用 gofmt 时就会出现错误提示:
build-error: syntax error: unexpected semicolon or newline before {

Go 语言虽然看起来不使用分号作为语句的结束,但实际上这一过程是由编译器自动完成,因此才会引发像上面这样的错误

也可以写成一行

func Sum(a, b int) int { return a + b }

对于大括号 {} 的使用规则在任何时候都是相同的(如:if 语句等)。

因此符合规范的函数一般写成如下的形式:

func functionName(parameter_list) (return_value_list) {
   …
}
  • parameter_list 的形式为 (param1 type1, param2 type2, …)
  • return_value_list 的形式为 (ret1 type1, ret2 type2, …)

只有当某个函数需要被外部包调用的时候才使用大写字母开头(就是前文 提到的 public),并遵循 Pascal 命名法;否则就遵循骆驼命名法,即第一个单词的首字母小写,其余单词的首字母大写。

下面这一行调用了 `fmt` 包中的 `Println` 函数,可以将字符串输出到控制台,并在最后自动增加换行字符 `\n`:
```go
fmt.Println("hello, workd")
```
使用 `fmt.Print("hello, world\n")` 可以得到相同的结果。

Notice Print 不会自动添加\n换行字符,需要自己添加

4.2.3 注释

go文本格式,默认UTF8
单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。

godoc 工具(第 3.6 节)会收集这些注释并产生一个技术文档。

4.2.4 类型

可以包含数据的变量(或常量)可以使用不同的数据类型或类型来保存数据。使用 var 声明的变量的值会自动初始化为该类型的零值。类型定义了某个变量的值的集合与可对其进行操作的集合。

类型可以是基本类型,如:int、float、bool、string;结构化的(复合的),如:struct、array、slice、map、channel;只描述类型的行为的,如:interface。

结构化的类型没有真正的值,它使用 nil 作为默认值(在 Objective-C 中是 nil,在 Java 中是 null,在 C 和 C++ 中是NULL或 0)。值得注意的是,Go 语言中不存在类型继承。

函数也可以是一个确定的类型,就是以函数作为返回类型。这种类型的声明要写在函数名和可选的参数列表之后,例如:

func FunctionName (a typea, b typeb) typeFunc

你可以在函数体中的某处返回使用类型为 typeFunc 的变量 var:

return var

一个函数可以拥有多返回值,返回类型之间需要使用逗号分割,并使用小括号 () 将它们括起来,如:

func FunctionName (a typea, b typeb) (t1 type1, t2 type2)

示例: 函数 Atoi (第 4.7 节):func Atoi(s string) (i int, err error)

返回的形式:

return var1, var2

这种多返回值一般用于判断某个函数是否执行成功(true/false)或与其它返回值一同返回错误消息(详见之后的并行赋值)。

使用 type 关键字可以定义你自己的类型(类似c/c++ 的typedef),你可能想要定义一个结构体(第 10 章),但是也可以定义一个已经存在的类型的别名,如:

type IZ int

这里并不是真正意义上的别名,因为使用这种方法定义之后的类型可以拥有更多的特性,且在类型转换时必须显式转换。

然后我们可以使用下面的方式声明变量:

var a IZ = 5

这里我们可以看到 int 是变量 a 的底层类型,这也使得它们之间存在相互转换的可能(第 4.2.6 节)。

如果你有多个类型需要定义,可以使用因式分解关键字的方式,例如:

type (
   IZ int
   FZ float64
   STR string
)

每个值都必须在经过编译后属于某个类型(编译器必须能够推断出所有值的类型),因为 Go 语言是一种静态类型语言。


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:scotth

查看原文:《读书笔记系列》 《The Way to Go》中文译本 知识点整理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1800 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传