GO 笔记 FROM go语言编程
来源:互联网 发布:儒尼尼奥任意球数据 编辑:程序博客网 时间:2024/04/25 20:36
GO 笔记DJM
概述
Go语言是从C语言演化而来, 类似于面向对象的过程语言。介意C 和C++之间,还有点javascript特征.
相关下载
go语言编程 相关测试代码
http://download.csdn.net/detail/princecnbj/9641660
go语言编程 PDF
http://download.csdn.net/detail/princecnbj/9641658
go语言编程(丁建民注)
http://download.csdn.net/detail/princecnbj/9641659
go环境安装文档
http://download.csdn.net/detail/princecnbj/9641662
Helloworld
package main
import "fmt"// 我们需要使用 fmt 包中的 Println()函数
func main() {
fmt.Println("Hello, world. 你好,世界! ")
}
环境
附助工具
Gow-0.8.0.exe Windows 下的Shell命令
Liteide go IDE 开发环境
LiteIde 配置 参考
搭建Go开发及调试环境(LiteIDE + GoClipse) --Windows篇
http://www.cnblogs.com/custa/p/3913526.html
软件包
go1.7.1.windows-amd64.msi
https://storage.googleapis.com/golang/go1.7.1.windows-amd64.msi
go1.7.1.linux-amd64.tar.gz
https://storage.googleapis.com/golang/go1.7.1.linux-amd64.tar.gz
运行
行go run print.go 运行go程序
go buildprint.go 把go程序编译成exe文件
配置环境变量
(1). 新建 变量名:GOBIN 变量值 :c:\go\bin
(2). 新建 变量名:GOARCH 变量值:386
(3). 新建 变量名:GOOS 变量值:windows
(4). 新建 变量名: GOROOT 变量值:c:\go
(5). 编辑 Path 在Path的变量值的最后加上 %GOBIN%
如果是msi安装文件,Go语言的环境变量会自动设置好。
访问Go安装包中的文档
打开Windows中的命令提示符(cmd.exe)执行命令: godoc -http=:6060
可以访问: http://localhost:6060/doc/install.html
语言特性
注意事项
1. 不得包含在源代码文件中没有用到的包,否则Go编译器会报编译错误。
2. 有Go函数(包括在对象编程中会提到的类型成员函数)以关键字func 开头。一个常规的函数定义包含以下部分:
func 函数名 (参数列表 )( 返回值列表 ) {
// 函数体
}
Go支持多个返回值。
对应的一个实例如下: func Compute(value1 int, value2float64)(result float64, err error) {
// 函数体
}
3. 代码注释与C++保持一致/* 块注释 */ // 行注释
4. Go程序并不要求开发者在每个语句后面加上分号表示语句结束
5. Go语言的 main() 函数不能带参数,也不能定义返回值。命令行传入的参数在 os.Args 变量中保存。如果需要支持命令行开关,可使用flag 包。在本书后面我们将解释如何使用 flag 包来做命令行参数规范的定义,以及获取和解析命令行参数。
6. 中数组是一个值类型(valuetype)。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作
7. type Integer int 和C语言相反的定义 integer 为新类型 int 是原类型
不支持重载
Go语言也放弃了构造函数(constructor)和析构函数(destructor)
非侵入性接口(interface)
内置 字典类型( map )
的数据类型:数组切片( Slice )类似vector
提供了多返回值
func getName()(firstName, middleName, lastName, nickNamestring){
return"May", "M", "Chen", "Babe"
}
关键字
defer 无论函数什么时候,什么情况退出 都要执行defer定义的语句
defer srcFile.Close()
defer func() {
// 做你复杂的清理工作
} ()
defer panic 和 recover
参考文档Go的异常处理 defer, panic, recover
http://blog.csdn.net/wuwenxiang91322/article/details/9042503
goroutine
通过在函数调用前使用关键字 go ,我们即可让该函数以goroutine方式执行。goroutine是一种
比线程更加轻盈、更省资源的协程。
反射(reflection)
最常见的使用场景是做对象的序列化(serialization,有时候也叫Marshal & Unmarshal)
,Go语言标准库的encoding/json、encoding/xml、encoding/gob、encoding/binary等包就大量
依赖于反射功能来实现。
例子
语法
变量声明
var v1 int
var v2 string
var v3 [10]int // 数组
var v4 []int // 数组切片
var v5 struct {
f int
}
数组切片
流程控制
条件语句,对应的关键字为 if 、else 和 else if ;
选择语句,对应的关键字为 switch 、 case 和 select (将在介绍channel的时候细说);
循环语句,对应的关键字为 for 和range ;
跳转语句,对应的关键字为 goto 。
,Go语言还添加了如下关键字:break 、continue 和 fallthrough 。
条件语句
关于条件语句的样例代码如下:
if a < 5 {
return 0
} else {
return 1
}
关于条件语句,需要注意以下几点:
条件语句不需要使用括号将条件包含起来 () ;
无论语句体内有几条语句,花括号 {} 都是必须存在的;
左花括号 { 必须与if 或者 else 处于同一行;
在 if 之后,条件语句之前,可以添加变量初始化语句,使用; 间隔;
在有返回值的函数中,不允许将“最终的”return 语句包含在 if...else... 结构中,
否则会编译失败:
function ends without a return statement 。
失败的原因在于,Go编译器无法找到终止该函数的return 语句。编译失败的案例如下:
func example(x int) int {
if x == 0 {
return 5
} else {
return x
}
}
关键字
Coroutine 协程 go <函数>
goroutine是Go语言中的轻量级线程实现,由Go运行时(runtime)管理。
在一个函数调用前加上 go 关键字,这次调用就会在一个新的goroutine中并发执行。当被调用的函数返回时,这个goroutine也自动结束了。需要注意的是,如果这个函数有返回值,那么这个返回值会被丢弃。
程序退出,且程序并不等待其他goroutine(非主goroutine)结束。
goroutine可创建的个数不受系统资源的限制,原则上一台服务器可以创建上百万个
goroutine,
Channel 通道 用于协程之间通信
channel是Go语言在语言级别提供的goroutine间的通信方式。我们可以使用channel在两个或
多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,我们建议用分布式系统的方法来解决,比如使用Socket或者HTTP等通信协议。Go语言对于网络方面也有非常完善的支持。
一般channel的声明形式为:
var chanName chan ElementType
与一般的变量声明不同的地方仅仅是在类型之前加了 chan 关键字。 ElementType 指定这个
channel所能传递的元素类型。举个例子,我们声明一个传递类型为int 的channel:
var ch chan int
绍如何给channel带上缓冲
要创建一个带缓冲的channel,其实也非常容易:
c := make(chan int, 1024)
使用 range 关键来实现更为简便的循环读取:
for i := range c {
fmt.Println("Received:", i)
}
select
select 实现超时机制
Go语言没有提供直接的超时处理机制,但我们可以利用 select 机制。
// 首先,我们实现并执行一个匿名的超时等待函数
timeout := make(chan bool, 1)
go func() {
time.Sleep(1e9)// 等待1秒钟
timeout <- true
}()
// 然后我们把timeout 这个channel利用起来
select {
case <-ch:
// 从 ch 中读取到数据
case <-timeout:
// 一直没有从 ch 中读取到数据,但从 timeout 中读取到了数据
}
channel可被传递的特性来实现我们的管道。
type PipeData struct {
value int
handler func(int)int
next chan int
}
type PipeData struct {
value int
handler func(int)int
next chan int
}
函数
函数的基本组成为:关键字 func 、函数名、参数列表、返回值、函数体和返回语句。
因此需要先牢记这样的规则:小写字母开头的函数只在本包内可见,大写字母开头的函数才
能被其他包使用。
这个规则也适用于类型和变量的可见性。
panic()
当在一个函数执行过程中调用 panic() 函数时,正常的函数执行流程将立即终止,但函数中
之前使用 defer 关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致
逐层向上执行 panic 流程,直至所属的goroutine中所有正在执行的函数被终止。
recover()
recover() 函数用于终止错误处理流程。
软件包
import "fmt"//
fmt.Println("The value of fval is", fval)
fmt.Printf("fval=%f, ival=%d, sval=%s\n", fval,ival, sval)
fmt.Printf("fval=%v, ival=%v, sval=%v\n", fval,ival, sval)
math/cmplx
复数
import "flag"
快速日解析析命令行参数
import"time"
获取时间
strings
字符串操作
Unicode
Rune
Runtime
Runtime.NumCPU()
runtime.GOMAXPROCS(16)
sync.
sync.Mutex
sync.RWMutex
syn.Once
sync. Atomic
import "net"
func Dial(net, addr string) (Conn, error)
- GO 笔记 FROM go语言编程
- 《Go语言编程》 笔记
- 《go语言网络编程》笔记
- go语言 基础编程学习笔记
- go语言学习笔记之并发编程
- 《go语言编程》学习笔记一
- 《go语言编程》学习笔记二
- 《go语言编程》学习笔记三
- 《go语言编程》学习笔记四
- go语言学习笔记之并发编程
- 五、go语言特性--go语言笔记
- Goolge Go编程语言
- Go编程语言简介
- Go 编程语言规范
- Go编程语言简介
- GO语言tcpip 编程
- Go 编程语言入门教程
- Go 语言编程
- Mac下设置vim语法高亮
- CH372
- 分享一些自己的学习历程和学习方法
- 翻译 《Little Book of Semaphores》
- 【例题&结论】【单调队列(滑动窗口)】NKOJ2152 滑动窗口
- GO 笔记 FROM go语言编程
- 8.1 Zend_View(2)
- ArrayList自动扩容解析
- Java 多线程同步的五种方法
- Android6.0出现「java.lang.UnsatisfiedLinkError .so has text relocations」的解决办法
- 安装GEM5(ubuntu14)过程记录
- SD + FAT文件系统学习
- ECShop常用知识点总结
- 简单的xml c#