Go学习笔记
2015-08-20 17:12
417 查看
Go语言
特性
赞美之词
Chapter1
tips
Chatper2 基本语法
特殊保留关键字
tips
变量申请
built-in types
流程控制
if
for
break goto 都可支持标签
switch
fallthrough
func函数定义
defer 延迟
panic recover try catch
import操作
struct 自定义类型
* 基本文件——$GOPATH/src, pkg, bin
* go build :编译,若有main package 生成目录名相同的可执行文件
* go install 生成package
* go fmt 可自动格式化代码风格;
而python的 print 会自动换行;
_, b = 34, 35 ; # 赋值给 “_” 的变量会被丢弃
未使用的变量,会编译错误(好强制);
int32 与 int 64 不可加减(无cast);
支持复数: var c complex64 = 5 + 5i;
字符串反引号 “ 括起来 为 raw_string, 不进行转义;
iota 每次赋值时,重置为0;
数组定长;
slice 有个 cap 概念;当cap为0后,slice.append() 会开辟新的内存;
var variable type; 变量申明在最后;
提供默认值的时候可以不申明 type;
甚至不提供关键词 var
var1, var2 := ‘1’, ‘2’
“:=” 赋值符号,相当于定义了这个变量;但仅针对局部变量;
全局变量必须用 var 显式申明;
var 变量;
const 常量;
int, uint; 以及各种定长 int32, int64; (各种int之间不可加减)
string: 双引号”“, 反引号“ 括起来;(无单引号) immutable;
改变字符串,必须变为 byte 数组,修改后,再 new_str = string(btye_array)
error: 错误类型
array: var arr
type;
slice: 动态数组; var arr []type;
map: 即 python dict; rating := map[string]float32 {“C”: 4.5, “GO”: 5}
go语言的内存分配——每个数据类型 一块 独立的区域;(因此不同Int之间无法赋值)
iota 枚举值
convention:
大写字母开头的为 Public; 如 Sqrt
小写字母开头的为 Private; 如 calculate
条件是可 申明变量(局部变量,仅if语句块内生效)
感想:囧!为啥把返回值放到 参数后面去了;
给返回值命名,最大的好处是 func 内可见,可直接return;
常用于资源关闭;
main 函数仅在 main package里有;
匿名定义就相当于其他语言的继承; Student默认包含Human的所有字段;
特性
赞美之词
Chapter1
tips
Chatper2 基本语法
特殊保留关键字
tips
变量申请
built-in types
流程控制
if
for
break goto 都可支持标签
switch
fallthrough
func函数定义
defer 延迟
panic recover try catch
import操作
struct 自定义类型
Go语言
特性:
极简语法,原生多线程支持;赞美之词:
解释性的灵活,动态类型语言的效率,静态类型的安全性;Chapter1:
GOPATH 为 go语言的工作目录;* 基本文件——$GOPATH/src, pkg, bin
* go build :编译,若有main package 生成目录名相同的可执行文件
* go install 生成package
* go fmt 可自动格式化代码风格;
tips:
array_linux.go array_darwin.go build 换选与当前系统环境相同的编译;Chatper2 ——基本语法
go 默认utf-8编码;特殊保留关键字:
chan, defer, fallthrough, map, range, select,tips:
fmt.Printf 不会自动换行;而python的 print 会自动换行;
_, b = 34, 35 ; # 赋值给 “_” 的变量会被丢弃
未使用的变量,会编译错误(好强制);
int32 与 int 64 不可加减(无cast);
支持复数: var c complex64 = 5 + 5i;
字符串反引号 “ 括起来 为 raw_string, 不进行转义;
iota 每次赋值时,重置为0;
数组定长;
slice 有个 cap 概念;当cap为0后,slice.append() 会开辟新的内存;
变量申请
var var1 type var default_var1, default_var2 type = '1', '2' var notype_var1, notype_var2 = '1', '2' simple_var1, simple_var2 := '1', '2'
var variable type; 变量申明在最后;
提供默认值的时候可以不申明 type;
甚至不提供关键词 var
var1, var2 := ‘1’, ‘2’
“:=” 赋值符号,相当于定义了这个变量;但仅针对局部变量;
全局变量必须用 var 显式申明;
var 变量;
const 常量;
built-in types:
bool: true, falseint, uint; 以及各种定长 int32, int64; (各种int之间不可加减)
string: 双引号”“, 反引号“ 括起来;(无单引号) immutable;
改变字符串,必须变为 byte 数组,修改后,再 new_str = string(btye_array)
error: 错误类型
array: var arr
type;
slice: 动态数组; var arr []type;
map: 即 python dict; rating := map[string]float32 {“C”: 4.5, “GO”: 5}
go语言的内存分配——每个数据类型 一块 独立的区域;(因此不同Int之间无法赋值)
iota 枚举值
const ( x = iota y = iota z = iota w ) # x:0, y:1, z:2, w:3 const t = iota # 此时iota重置为0, t:0
convention:
大写字母开头的为 Public; 如 Sqrt
小写字母开头的为 Private; 如 calculate
流程控制:
if:
条件式左右 无 括号 ()条件是可 申明变量(局部变量,仅if语句块内生效)
for
for i=0; i < 1000; i++ { } for ; sum < 1000; { sum += 10 } 可简写为: for sum < 1000; { sum += 10 } # 其实就是 while(囧)
break, goto 都可支持标签;
switch
每个 case 默认添加 break操作(终于不用写那么多 break 了)fallthrough
强制 switch case 匹配后 继续执行,不自动break;func函数定义
func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) { return value1, value2 }
感想:囧!为啥把返回值放到 参数后面去了;
给返回值命名,最大的好处是 func 内可见,可直接return;
defer (延迟)
在函数结束后,逆序执行;(先进后出)常用于资源关闭;
panic + recover = try catch;
每个 package 建议有一个 init 函数(正如python package 中的 init.py 作用一样)main 函数仅在 main package里有;
import操作:
import ( f "fmt" . "net/http" _ "github.com/ziutek/mymysql/godrv" ) # f 此时为 fmt 的别名; . 为当前目录的意思,http包里函数可以直接使用; # 同python 中 from net.http import * # _ 不引入变量,仅执行 init 函数;
struct 自定义类型;
type Human struct { name string age int weight int } type Student struct { Human speciality string }
匿名定义就相当于其他语言的继承; Student默认包含Human的所有字段;
# method 只需要在函数前面增加一个 receiver 即可; func (c Circle) area() float64 { return c.radius * c.radius * math.Pi }
相关文章推荐
- GO语言类型转换和类型断言实例分析
- Go语言实现的最简单数独解法
- Go实现比较时间大小
- 在Go程序中实现服务器重启的方法
- 编写Go程序对Nginx服务器进行性能测试的方法
- 使用go和python递归删除.ds store文件的方法
- go和python调用其它程序并得到程序输出
- 从Node.js 转到 Go平台
- go语言中的interface使用实例
- Go项目的目录结构详解
- GO 语言学习指南
- GO语言实现文件上传代码分享
- sublime安装支持go和html的插件
- Go语言实现汉诺塔算法
- 利用Go语言初步搭建一个web应用的教程
- 创建第一个Go语言程序Hello,Go!
- 在Linux系统中安装Go语言的详细教程
- 五步让你成为GO 语言高手
- Go中map数据类型3点小知识
- Go语言常见哈希函数的使用