google go: 入门
参考: http://www.infoq.com/articles/google-go-primer
特点: simple, fast, safe and concurrent
Variable Declarations
var sum int // Just a declaration
var total int = 42 // A declaration with initialization
name := "Samuel"
Conditionals
if result := someFunc(); result > 0 {
/* Do something */
} else {
/* Handle error */
}
Switches
var result int
switch byte {
case 'a', 'b':
result = 1
default:
result = 0
}
switch result := calculate(); true {
case result < 0:
/* negative */
case result > 0:
/* positive */
default:
/* zero */
}
Range
range表达式右边必须是array, slice, string or map 类型, or a pointer to an array; or it may be a channel.
Functions
func add(a, b int) int { return a + b }
Multiple Return Values
func divide(a, b int) (quotient, remainder int) {
quotient = a / b
remainder = a % b
return
}
Anonymous Functions 匿名函数(闭包)
func makeAdder(x int) (func(int) int) {
return func(y int) int { return x + y }
}
func main() {
add5 := makeAdder(5)
add36 := makeAdder(36)
fmt.Println("The answer:", add5(add36(1))) //=> The answer: 42
}
闭包可以做为参数传递
Primitive Types
两种新类型 two new types: slice and map.
Arrays不是动态的,跟c一样。
slices是一种新形式的array
/* Construct a slice on ary that starts at s and is len elements long */
s1 := ary[s:len]
/* Omit the length to create a slice to the end of ary */
s2 := ary[s:]
/* Slices behave just like arrays */
s[0] == ary[s] //=> true
// Changing the value in a slice changes it in the array
ary[s] = 1
s[0] = 42
ary[s] == 42 //=> true
改变slices的同时,也将改变array
/* Move the start of the slice forward by one, but do not move the end */
s2 = s2[1:]
/* Slices can only move forward */
s2 = s2[-1:] // this is a compile error
/* Cannot grow it past its capacity */
s = s[0:4] // this is a compile error
不需要array也能初始化slices
/* literal */
s1 := []int{1,2,3,4,5}
/* empty (all zero values) */
s2 := make([]int, 10) // cap(s2) == len(s2) == 10
Maps 哈希
m := make(map[string] int) // A mapping of strings to ints
/* Store some values */
m["foo"] = 42
m["bar"] = 30
/* Read, and exit program with a runtime error if key is not present. */
x := m["foo"]
/* Read, with comma-ok check; ok will be false if key was not present. */
x, ok := m["bar"]
/* Check for presence of key, _ means "I don't care about this value." */
_, ok := m["baz"] // ok == false
/* Assign zero as a valid value */
m["foo"] = 0;
_, ok := m["foo"] // ok == true
/* Delete a key */
m["bar"] = 0, false
_, ok := m["bar"] // ok == false
Object Orientation 面向对象
Structs
type Point struct {
x, y float64
}
var p *Point = new(Point)
p.x = 3
p.y = 4
实例化个对象,并用指针类型的p去调用它的方法和变量
/* Note the receiver is *Point */
func (self *Point) Scale(factor float64) {
self.x = self.x * factor
self.y = self.y * factor
}
p.Scale(2);
d = p.Length() //=> 10
注意下面的self被定义成指针,这样self的值修改后可以返回修改后的值。如果定义成Point,参数是传值的,修改后的值不会被返回。
Interfaces 接口
duck-typed mentality 编译是动态识别类型
定义 type Writer interface {
Write(p []byte) (n int, err os.Error)
}
type Frobber interface {
Frob()
}
func frobtastic(f Frobber) { f.Frob() }
功能的抽象,作为参数可在别处调用
每个对象都实现了一个空接口 interface {}
Inheritance 继承
go语言没有继承, 使用组合和代理
type Engine interface {
Start()
Stop()
}
type Car struct {
Engine
}
func GoToWorkIn(c Car) {
/* get in car */
c.Start();
/* drive to work */
c.Stop();
/* get out of car */
}
也可以使用代理
type Base struct {}
func (Base) Magic() { fmt.Print("base magic") }
func (self Base) MoreMagic() {
self.Magic()
self.Magic()
}
type Foo struct {
Base
}
func (Foo) Magic() { fmt.Print("foo magic") }
f := new(Foo)
f.Magic() //=> foo magic
f.MoreMagic() //=> base magic base magic
方法重载不对其有影响
Concurrency 并发
message-passing model 消息传送 支持内存共享
逻辑: 通信不依赖内存共享 内存共享依赖通信
两个基本结构: goroutines channels
Goroutines
有不同名字, 可以卸载任何依赖包
定义 go DoThis() // but do not wait for it to complete
匿名函数调用 go func() {
for { /* do something forever */ }
}() // Note that the function must be invoked
Channels
提供了FIFO先进先出的消息队列供并发间通信
/* Creating a channel uses make(), not new - it was also used for map creation */
ch := make(chan int)
/* Sending a value blocks until the value is read */
ch <- 4
/* Reading a value blocks until a value is available */
i := <-ch
长时间数值计算
ch := make(chan int)
go func() {
result := 0
for i := 0; i < 100000000; i++ {
result = result + i
}
ch <- result
}()
/* Do something for a while */
sum := <-ch // This will block if the calculation is not done yet
fmt.Println("The sum is:", sum)
两个方法定制:
指定缓存大小
可发送接受操作成功信息
/* Create a channel with buffer size 5 */
ch := make(chan int, 5)
/* Send without blocking, ok will be true if value was buffered */
ok := ch <- 42
/* Read without blocking, ok will be true if a value was read */
val, ok := <-ch
Packages 包
文件开头 依赖包声明, 大写开头的能同时被其他包使用
package geometry
import "math"
/* Point is capitalized, so it is visible outside the package. */
type Point struct {
/* the fields are not capitalized, so they are not visible
outside of the package */
x, y float64
}
总结
两个大的缺失: exceptions and generics(泛型), 目的是要取代C
分享到:
相关推荐
go语言入门教程.pdf
Go语言,通常被称为Golang,是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它具有简洁、快速、安全和现代的特点。Go语言设计团队的初衷是为了让编程更加简单、高效,同时能够应对...
### Go语言入门教程知识点详解 #### 一、Go语言的历史背景与起源 - **Limbo语言的影响**:Limbo语言被视为Go语言的前身之一,它不仅由相同的设计团队开发,而且Go语言还从Limbo中继承了许多优秀特性。 - **贝尔...
Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的、具有C风格的编程语言。本资源“Go语言入门经典 源码”是一份针对初学者的Go语言学习资料,包含了丰富的源代码示例,旨在帮助...
go语言入门教程,让你轻松的入门学习掌握。Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10...
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易 Go 是由 Google 的一个团队与一些开源社区的 贡献者 一同开发的开源项目。 Go 编程语言是一个开源项目,它使程序员更具生产力。 Go 语言具有很...
Go语言入门PPT,包含对Go主要特性的讲解及相关代码示例
《Golang韩顺平Go语言入门》是一套全面介绍Go语言核心编程的教程素材,旨在帮助初学者快速掌握这门现代、高效的系统编程语言。Go语言,也被称为Golang,由Google公司于2009年推出,由Robert Griesemer、Rob Pike及...
Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的编程语言。它的设计目标是提高开发者的生产力和软件的运行效率,特别注重简洁、清晰和高效的语法,使其成为构建大规模分布式...
Go语言入门教程+pdf
Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的语言。它旨在提高编程效率,简化并发编程,并强调简洁的编程哲学。Go语言的设计受到了多门经典编程语言的影响,如C语言、...
Go语言入门新手参考 Go语言作为现代化的语言,旨在提供一种简洁、快速、可靠的编程体验。下面是Go语言入门新手参考的知识点总结: 1. Go语言的起源、发展与普及: Go语言由谷歌公司开发,于2009年首次发布。Go...
go语言入门笔记。。
Go语言,也称为Golang,是由Google设计的一种静态类型的编程语言。它于2009年发布,并因其简洁、高效的特点迅速获得了开发者们的青睐。Go语言的设计目标是提供一种易于学习、编译速度快、运行效率高的现代编程语言。...
《Go语言快速入门:Go语言基础教程》 Go语言,又称Golang,是Google在2009年推出的一种开源编程语言,由罗伯特·格瑞史莫、罗布·派克和肯特·贝克等大神设计。Go语言的设计目标是简单、高效、安全,特别适合构建...
Go语言(又称Golang)是由Google的三位工程师Robert Griesemer、Rob Pike和Ken Thompson于2007年开始设计,并在2009年11月正式宣布推出的静态强类型、编译型编程语言。Go语言的设计目标是提供一种高效、简洁、安全且...
Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。它的设计目标是提高开发效率,同时保持程序的高性能和可靠性。Go语言以其简洁的语法、高效的并发模型以及...