go语言编程摘要

第一章 初识Go语言

Google是Go语言的主推者,开源社区

自动垃圾回收

函数多返回值

内存检查工具 Rational Purify、Compuware BoundsChecker、Parallel Inspector等

内置map 和Slice类型(数组)

不支持继承和重载

goroutine是比线程更轻盈更省资源的协程

支持反射,不能通过类型名称字符串来构造实例

通过Cgo支持对C的重用

可执行程序必须有一个名字为main的包,并且有一个main函数(没有参数,也没有返回值)

log包提供了基础的日志功能

支持GDB调试

第二章 顺序编程

变量声明

var v1 [] string

var (

v1 int

v2 string

声明并直接初始化的场景,var可以省略

var v3 = 10

v3:= 10

编译器可以自动推导类型

支持多重赋值 i,j = j,i

函数有多个返回值但是只需要其中一个,可以使用多重赋值+匿名变量

,,v3 := getName()

常量通过const关键字声明

const a,b,c = 3,4,"foo"

内置常量 true false iota(自增,const重置为0)

大写字母开头的常量,包外可见,否则为私有

基础类型 bool int8 byte int16 int unit unitptr float32 float64 complex64 complex128 string rune(字符) error

符合类型 pointer array slice map chan struct interface

字符串可以以数组下标的方式读取,但是不能修改。

内置函数len() 获取字符串长度或者数组长度

range关键字遍历数组、容器

for i,v := range array{

}

数组是值类型,作为参数传递时,进行数据复制,函数中无法修改传入的数组内容

slice 基于数组创建或者通过make创建

mySlice := array[:5]

mySlice := make([]int ,5)

len()获得元素个数 cap()获得容量 append()切片扩容 append(slice1,slice2...) 三个点代表把slice2的所有元素打散后传入,满足不定参数的特点。 copy()支持slice的复制

map使用:

var mymap map[string] PersonInfo

mymap = make(map [string] PersonInfo) 、mymap = make(map [string] PersonInfo, 100)

mymap["123"]=PersonInfo{"1","jack"}

删除用delete(mymap,"123")

查找 value,ok:=mymap["123"] ok为true代表找到

条件语句if :不需要将条件用括号包含起来 {}必须存在 不允许存在return

switch语句的条件对象可以省略,在case后面加上条件判断;不需要使用break来退出case,如果继续执行下一个case,使用fallthrough关键字

循环支持for,不支持while和do while, 省略条件则代表无限循环,如for {sum ++}

break可以后面跟一个label,支持中断那一层的循环。

支持goto语句

函数定义 func Add(a, b int)(ret int ,err error){},参数类型相同可以省略类型描述,如果只有一个返回值,可以写成func Add(a,b int) int {}

对于函数、类型、变量的命名,要注意大小写,大写对其他包开放,小写只对本包开放。

支持不定参数 func myfunc(args ...int) 不定参数必须是最后一个参数;不定参数本质上是一个数组切片 ;不定参数可以使用interface指定为任意类型,arg.(type)获取参数运行时的实际类型。

支持匿名函数,支持闭包,闭包中可以引用外部变量

错误处理,是GO语言的一大亮点

error接口

自定义error接口,实现Error方法。

defer关键字(延迟执行)来完成资源的释放,如果有多条语句,可以使用匿名函数 defer func(){}()

defer关键字遵循先进后出的原则,所有一个defer语句最先被执行。

panic和recover方法的使用

使用flag包解析命令行输入的参数 flag.String("i", "infile", "1")

掌握os io bufio strconv等标准库的使用。

第三章 面向对象编程

支持为任意类型增加方法

type Integer int

func (a Integer) less (b Integer){

return a<b

}

Go语言的大多数类型都是值类型,包括基本类型和符合类型

slice map channel和interface看起来像引用类型。

结构体定义

type Rect struct {

x,y int

}

初始化 rect1 = new (Rect);rect2=&Rect{};rect3=&Rect{1,2};rect4=&Rect{x:1,y:2}

结构体通过匿名组合的方式,实现了类似java继承和方法覆盖的能力,如果方法没有被改写,则可以直接集成过来。

普通的struct不能赋值为nil,并且不能和nil进行==判断,struct指针可以赋值为nil,即使==nil,println也可以输出struct的类型。

非侵入式接口

type IFile interface {

Read (buf []byte)(n int, err error)

}

接口赋值

var a Integer = 1

var b LessAdder = &a

判断某个实例是否实现了接口

var file1 Writer = ...

if file6,ok:= file1.(*File);ok {

}

switch v := v1.(type) {

case int :

...

}

也可以通过反射的方式reflect.TypeOf()

接口跟结构体一样,支持匿名组合

空接口interface{}可以看做是可以指向任意对象的Any类型

接口对象和接口对象的指针都可以赋值为nil或者判断是否相等。

讲一个指针对象赋值为nil,然后将指针对象赋值给一个接口,此时接口对象不为nil,原因??

第四章 并发编程

常见的并发通信模型:共享数据、消息

线程和进程通过最多不超过1W个,而协程可以轻松创建上百万个。

goroutine支持的协程,在系统调用操作中会出让CPU给其他的goroutine。

channel:在多个goroutine之间传递消息,实现了锁的能力。

声明 var chanName chan ElementType ;var m map[string] chan bool

赋值 ch:=make (chan int)

写入 cha <- chanValue 写入会导致程序阻塞,直到有其他goroutine从该channel中读取数据

读取 chanValue :=<- ch,如果之前未写入数据,则读取也会导致程序阻塞。

select语句

for {

select {

case ch<-0:

case ch<-1:

}

i:= <-ch

}

带缓冲的channel,在channel缓冲区塞满之前不会阻塞

var c = make (chan int ,1024)

单向channel,可以限制只读或者只写

关闭channel cloes(chan)

判断一个channel是否被关闭 x,ok:=<-ch ok如果返回false,则代表chan已经被关闭。

多核并行化:需要使用runtime.GOMAXPROCS(16)来明确告诉GO编译器CPU的核数。 NumCPU()方法获取CPU核心数

出让时间片: Gosched()

同步锁:sync.Mutex和sync.RWMutex(单写多读)

全局唯一性操作 Once.Do() 在sync.Once包

第五章 网络编程

建立链接

conn,err:=net.Dial("tcp","192.168.0.10:2100") ==net.DialTCP

conn,err:=net.Dial("udp","192.168.0.10:2100") ==net.DialUDP

conn,err:=net.Dial("ip4:icmp","www.baidu.com")

conn,err:=net.Dial("ip4:icmp","www.baidu.com")

conn.write()

conn.read()

net.ResolveTCPAddr() 解析地址和端口号

net.ParseIP() 验证IP地址有效性

net.IPv4Mask 创建子网掩码

net.DefaultMask()

net.ResolveIPAddr()/net.LookupHost() 根据域名查找IP地址

http封装

http.Get("www.baidu.com")

http.Post()

服务端 http.ListenAndServe()

支持RPC编程

Go的默认数据结构编解码是用Gob,支持自定义

时间: 2024-10-18 23:42:58

go语言编程摘要的相关文章

轻松学习C语言编程的秘诀:总结+灵感

目前在准备一套C语言的学习教程,所以我这里就以C语言编程的学习来讲.注意,讲的是"轻松学习",那种不注重方法,拼命玩命的方式也有其效果,但不是我提倡的.我讲究的是在方式方法对头.适合你.减轻你学习负担和心里压力的前提下,才适当的抓紧时间. 因此,探索一种很好的学习方法就是我所研究的主要内容. 众所周知,学习C语言并非易事,要学好它更是难上加难.这和你期末考试背会几个题目的答案考上满分没多大关系,也就是说你考试满分也说明不了你学好.学精通了C语言.那么怎么才算学精通C语言?闭着眼睛对自己

YL-236 LCD12864汉字显示C语言编程

sfr P0=0x80; sfr P1=0x90; sfr P2=0xa0; sfr P3=0xb0; sbit cs1=P2^0; sbit cs2=P2^1; sbit e=P2^2; sbit rw=P2^3;//可以直接接地 sbit di=P2^4; sbit rst=P2^5;//默认为1,可以直接接电源 extern unsigned char code abc[] ; ys(int ms) { int k,d; for(k=0;k<ms;k++) for(d=0;d<123;d

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

LINUX下C语言编程基础

实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理及语法规范 7. 掌握静态库和动态库的生成 二.实验步骤 1. 快捷键 Ubuntu中: 2. vim VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人

关于C语言编程软件的推荐!

现在有各种各样的C语言编程软件,现在推荐一下codeblocks,codeblocks不仅仅局限于c语言,它适用于多种语言. Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件.Code::Blocks由纯粹的C++语言开发完成,它使用了著名的图形界面库wxWidgets(2.6.2 unicode)版.对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格. 在网络上直接下载

linux下的c语言编程删除文件夹

刚刚在学习开始做新项目的时候,学长布置了一项任务,就是在给定一个目录下,要将这个目录下一个星期之前的目录包括里面的文件全部删除,只保留这一个星期内的.百度了好久的资料,终于完成,记录一下防止忘记.(注:文件夹名称默认为日期格式,如20140716) #include<dirent.h> #include<sys/types.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #i

学习go语言编程系列之helloworld

1. 下载https://golang.org/dl/ # Go语言官网地址,在国内下载太慢,甚至都无法访问.通过如下地址下载:https://golangtc.com/download. 2. 安装在windows下,直接一步步点击安装即可. 3. 配置在正式开始go语言编程之前,需要进行一些基础环境变量的配置.在这里主要需要配置2个环境变量:GOROOT和GOPATH.(1)GOROOT:GO的安装路径,需要添加到环境变量中. Linux环境: vim /etc/profile export

R语言编程艺术(1)快速入门

这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是"程序",因此,希望通过学习这本书,能提高编程效率,以及让自己更像是一个"程序员". 本文对应<R语言编程艺术>第1章:快速入门. 生成向量的函数c(),这里c表示"连接"(concatenate) 打印列表方式: print(listname) str(listname) 第一种将

《十天学会单片机和C语言编程》

大家注意了这个文件只有最新版迅雷可以下载,下面的lesson几就是第几课.点击右键使用迅雷下载. ed2k://|file|[十天学会单片机和C语言编程].Lesson1.rar|449712628|262b8896ad6828cd33ed7189fe94cb2d|h=76MXIF34BFV3VUPLLBN3ASNOVCACHTO3| ed2k://|file|[十天学会单片机和C语言编程].lesson10.rar|667224261|ed9eb3658e78db507b7feeb40ec82