go语言随手记 -- go语言定位于高并发服务端程序

1.基本数据类型

bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 的别名
rune // int32 的别名 // 表示一个 Unicode 码点 java的char
float32 float64
complex64 complex128

2.基本数据结构 List and Map

go语言中没有list,只有数组(定长)和切片(不定长,有容量)

var list []int =[]int{1,2,3}; var slice []int= list[:]

go语言支持map

var m map[string]string = map[string]string{"author": "Mignet"}
for k, v := range m {
fmt.Println(k, v)
}

3.面向对象 struct interface function

go语言认为:封装、继承和多态,对于面向对象来讲都是多余的,所以它通过检查是否实现接口interface的方法function来判定对象是否可以互相赋值。

struct定义结构体,function定义方法,如果这个function恰好和interface的function定义一样,就认为其实现了该interface。典型的如:Error和Print都是接口,但你不用声明,直接实现方法即可用

function是go语言的一等公民,它支持一次返回多个值,这是和很多语言不一样的。

方法可见性:go抛弃了public、private等关键字和概念,只看function的首字母,大写就表示public

4.指针和引用 * and &

*T 是指向 T 类型值的指针。其零值为 nil。
var p *int
& 操作符会生成一个指向其操作数的指针。
i := 42
p = &i
* 操作符表示指针指向的底层值。
fmt.Println(*p) // 通过指针 p 读取 i
*p = 21 // 通过指针 p 设置 i

5.Go程 Goroutine 名字来自Coroutine

当需要启动一个独立协程执行代码时,代码块前面加上go即可

6.并发和互斥锁 channel select and mutex

当发生并发争抢资源时,go推荐的模式是:要通讯,不要共享变量。用通信来共享数据,而不是通过共享数据来进行通信。所以它提供了channel作为协程通讯的通道。

package main

import "fmt"

func Count(i int, ch chan int) {
fmt.Println("Counting", i)
ch <-
}
func main() {
chs := make([]chan int, )
for i := ; i < ; i++ {
chs[i] = make(chan int)
go Count(i, chs[i])
}
for _, ch := range chs {
<-ch
}
}

这个小例子充分展示了多协程通讯的使用

(当channel需要switch case的时候,用select关键字代替switch)

mutex什么时候用?sync.Mutex和sync.RWMutex用在我们只是想保证每次只有一个 Go 程能够访问一个共享的变量,从而避免冲突的情况下。比如java中为了线程安全在数据结构的读操作和写操作中的加锁动作

单例,go认为这种全局只执行一次的情况没必要想那么复杂,所以提供了sync.Once,保证全局唯一性执行且线程安全,比如:once.Do(setup)

7.官方包 > 文件读写、网络编程、加密解密、序列反序、日志
Go语言内置提供了基本的操作包支持:io、net(http/rpc)、encoding(xml/json)、crypto(md5/sha1)、log

8.其实还有一些细节,但你完全可以在深入使用的时候再处理。现在这些已经足够用了

如果你还在犹豫,不妨先把编程环境搭起来试试,顺便可以跟着我实践一下

最新文章

  1. 课堂 一些代码的叫法 JavaScript js
  2. web 小知识
  3. LeetCode 笔记系列 20 Interleaving String [动态规划的抽象]
  4. 20160131.CCPP体系详解(0010天)
  5. Android教程:ImageView 设置图片
  6. WSockExpert[抓包工具]
  7. 纯代码实现wordpress文章隐藏内容评论可见
  8. Linux 桌面玩家指南:12. 优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)
  9. 在比特币的OP_RETURN上,大家都干了些啥?
  10. gdb调试原理及qemu中的gdbserver
  11. Cortext-A7_i.MX 6ULL——多模式DDR控制器(MMDC)
  12. Linux 修改SWAP分区后导致开机问题
  13. Python全栈-网络编程基础
  14. day23-python操作数据库三
  15. mysql lost connection to server during query
  16. Spring中内置的一些工具类
  17. 中文分词库及NLP介绍,jieba,gensim的一些介绍
  18. XML_CPP_资料_libXml2_01_Code
  19. CSS3之border-image
  20. 微软研发流程(ALM)管理培训会议(比亚迪汽车)

热门文章

  1. Cocos Creator一步一步实现重力球游戏
  2. 区间 GCD
  3. js通过方法返回对象的注意点
  4. App自动化环境搭建
  5. 机器学习实战_KNN(一)
  6. JavaScript中For循环以及For循环嵌套实例
  7. caffe中batch norm源码阅读
  8. cmake::编译一个工程
  9. Intellij idea 自动生成serialVersionUID
  10. The usage of Markdown---表格