[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
编程语言
> 详细
Go语言编程(旧读书笔记)
时间:
2015-06-27 16:44:22
阅读:
228
评论:
0
收藏:
0
[点我收藏+]
Go语言编程
目录
[
隐藏
]
1
前言
2
初识Go语言
3
顺序编程
4
OOP
5
并发编程
6
网络编程
7
安全编程
8
工程管理
9
开发工具
10
进阶话题
11
附录A
[
编辑
]
前言
协程?
go
run(‘test‘)
Go强制了{ }的编写风格: if expression {
错误处理:
defer?相当于finally?注意这里的作用域,defer之前似乎没有用{ }把整个(try)块括起来?
defer相当于说推迟语句的执行,其内部实现会自动管理嵌套作用域的问题?
Go允许返回多个值(像Python里的tuple返回)
Go用组合,不用继承、虚函数、虚函数重载
Go里的变量声明是先变量名字,后类型名字(Pascal风格,但没有:)?
Go的接口是duck typing吗?
Go里,2个接口只要拥有相同的方法列表(名字、签名、
顺序
??),那么就是等同的
?Go里避免太多的{ }嵌套可能是一种策略——这使它显得更像一门脚本语言,给程序员写代码带来某种“轻快”的感觉。。。
[
编辑
]
初识Go语言
Plan 9上的Limbo语言被认为是Go的前身?
支持自动GC?——那不就和Java/C#的性能差不多了么
更丰富的内置类型:
Slice
map
多返回值
func getName() (firstName, lastName, nickName string){
//由于这里返回值也给了名字,因此可以赋值然后空return!(Python里似乎还不能够这么灵活,靠)
fn, ln, nn := getName()
模式匹配(destructuring):_,ln,_ := getName()
错误处理:defer、panic、recover
匿名函数和闭包
f := func(x,y int) int { return x+y }
类型:类似于C里的struct(估计这里借用了Objective-C的一些做法。。。)
type Bird struct { ... }
func (b *Bird) Fly() { ... } //这一句的写法我怎么有点看不明白呢?见鬼
并发编程
resultChan := make(chan, int, 2)
go sum(.../*参数略*/, resultChan)
func sum(..., resultChan chan int) {
... resultChan <- sum
sum1, sum2 := <-resultChan, <-resultChan //Channel对象只有一个符号操作:<- ,放左边代表取出,右边表示放进?
反射:靠,这边的语法太丑陋了,妈的
Cgo
第1个Go程序:
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
go run hello.go //直接运行;
go build hello.go && ./hello //编译运行;即可以解释执行,也可以编译运行(这个跟Rust倒是一样的)
[
编辑
]
顺序编程
var v3 [10]int //变态的数组声明语法~
var v7
map
[string] int //string->int的映射
i := 10 //自动类型推导?
i,j = j,i
数值类型:int uint int32 int64 float32 float64 complex64 complex128
const
true false iota(每个const的开头从0开始,每次出现自动增1?用于定义枚举,但Go并不支持enum关键字)
string byte/rune error
uintptr
不同类型的数不能直接比较,也就是说,Go不做
自动类型提升
?
字符串遍历:for i := 0; i < len(str); i++ { ... str[i] }
Unicode字符遍历:
for i, ch := range str { ... }
数组是一个值类型!
切片:var mySlice []int = myArray[:5]
mySlice2 := make([]int, 5)
可动态增减元素:len(mySlice) cap(mySlice) append copy ...
map
delete(myMap, "key") //靠,这里的操作都是C语言风格的,不支持C++/Java/C#里的.成员函数访问操作?
流程控制:
if else
switch case
for
goto
函数
成员函数的写法太怪异了:func (file *File) Read(b []byte) (n int, err Error) //注意,没有其他语言里的this、self等关键字!
闭包
错误处理
p48 return nil, &PathError("stat", name, err) //这里&的写法是怎么回事?以引用方式传递对象吗
defer func() { ... } ()
func panic(interface())
func recover() interface()
[
编辑
]
OOP
值语义(默认?)和引用语义(&)
?Go使用*符号,那么它到底是不是C/C++里的指针?(估计不是,但看着有点诡异)
初始化
r1 := new(Rect)
r2 := &Rect()
组合就是继承:type Derived struct{
Base //还可以写成*Base,这样的话,。。。——相当于C++里的虚基类?
... //*log.Logger:可直接注入其他类的方法?但logger类显然无法访问当前类的数据成员(!!)
可见性:大写为public,小写是private
(非侵入式的)接口
这里的语法似乎有点类似于Objective-C。。。注意声明type IFile interface { ... }时,里面的Read、Write不需要带(f *File)(this引用)
接口查询
:略
类型查询:vt := v.(type)
接口组合
Any类型:interface()
[
编辑
]
并发编程
主main不等待goroutine直接退出会导致线程强制结束?
channel
select(这是学习了Erlang吧?)
超时机制:创建一个额外的channel
timeout := make(chan bool, 1)
go func() { time.Sleep(1e9) timeout <- true }()
select {
... case <-timeout: //已经超时
利用channel传递实行管道?
单向chan:声明的时候加上<-
关闭:close(ch)
同步
sync.Mutex sync.RWMutex
sync.Once
[
编辑
]
网络编程
net.Dial?这个方法名太。。。了
net/http
net/rpc
Gob
JSON
[
编辑
]
安全编程
略
[
编辑
]
工程管理
远程import:神经病!
GOPATH
Android支持???——必须在adb shell下运行吧
[
编辑
]
开发工具
[
编辑
]
进阶话题
反射
Type, Value
语言交互
Cgo:import "C"
链接符号:由下列信息构成(注意Go里无重载)
Pakcage
ClassType
Method(恩?链接符号允许/、*、. ?)
goroutine机制
libtask?
接口机制
[
编辑
]
附录A
常用包:fmt io bufio strconv os sync flag encoding/json http
版权声明:本文为博主原创文章,未经博主允许不得转载。
Go语言编程(旧读书笔记)
原文:http://blog.csdn.net/cteng/article/details/46659981
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!