第1章 入门  (已看)

  1.1 hello,world

package mainimport"fmt"func main(){fmt.Println("Hello,World")
}

Hello,World

$go run HelloWorld.go

$go build HelloWorld.go

  1.2 命令行参数

package mainimport ("fmt""os")func main(){var s,sep stringfor i :=1; i < len(os.Args);i++{s+= sep +os.Args[i]sep= " "}fmt.Println(s)
}

echo1

package mainimport ("fmt""os")func main(){s,sep:="",""for _,arg:=range os.Args[1:] {s+= sep +argsep= " "}fmt.Println(s)
}

echo2

  1.3 找出重复行

  1.4 GIF动画

  1.5 获取一个URL

  1.6 并发获取多个URL

  1.7 一个Web服务器

  1.8 其他内容

第2章 程序结构 (已看)

  2.1 名称

  2.2 声明

  2.3 变量

    2.3.1 短变量声明

    2.3.2 指针

    2.3.3 new函数

    2.3.4 变量的生命周期

  2.4 赋值

    2.4.1 多重赋值

    2.4.2 可赋值性

  2.5 类型声明

  2.6 包和文件

    2.6.1 导入

    2.6.2 包初始化

  2.7 作用域

第3章 基本数据 (已看)

  3.1 整数

  3.2 浮点数

package mainimport ("fmt""math")const(width,height= 600,320cells= 100xyrange= 30.0xyscale= width/2/xyrangezscale= height * 0.4angle= math.Pi / 6)var sin30,cos30 =math.Sin(angle),math.Cos(angle)func main(){fmt.Printf("<svg xmlns = 'http://www.w3.org/2000svg'" +"style='stroke:grey;fill:white;stroke-width:0.7'" +"width='%d' height='%d'>",width,height)for i := 0; i < cells; i++{for j := 0;j < cells;j++{ax,ay := corner(i+1,j)bx,by :=corner(i,j)cx,cy := corner(i,j+1)dx,dy := corner(i+1,j+1)fmt.Printf("<polygon points='%g,%g %g,%g %g,%g %g,%g'/>\n",ax,ay,bx,by,cx,cy,dx,dy)}}fmt.Println("</svg>")
}func corner(i,jint)(float64,float64) {x := xyrange * (float64(i)/cells-0.5)y := xyrange * (float64(j)/cells-0.5)z :=f(x,y)sx := width/2 + (x-y)*cos30*xyscalesy := height/2 + (x+y)*sin30*xyscale - z*zscalereturnsx,sy
}func f(x,y float64) float64 {r :=math.Hypot(x,y)returnmath.Sin(r)
}

surface

  3.3 复数

package mainimport ("image""image/color""image/png""math/cmplx""os")func main(){const(xmin,ymin,xmax,ymax= -2,-2,+2,+2width,height= 1024,1024)img := image.NewRGBA(image.Rect(0,0,width,height))for py := 0;py < height;py++{y := float64(py)/height*(ymax-ymin)for px := 0;px < width;px++{x := float64(px)/width*(xmax-xmin) +xminz :=complex(x,y)img.Set(px,py,mandelbrot(z))}}png.Encode(os.Stdout,img)
}func mandelbrot(z complex128) color.Color {const iterations = 200const contrast = 15varv complex128for n := uint8(0);n < iterations;n++{v= v*v +zif cmplx.Abs(v) > 2{return color.Gray{255 - contrast*n}}}returncolor.Black
}

mandelbrot

  3.4 布尔值

  3.5 字符串

    3.5.1 字符串字面量

    3.5.2 Unicode

    3.5.3 UTF-8

    3.5.4 字符串和字节slice

package mainimport ("fmt""bytes")func intsToString(values []int) string{varbuf bytes.Bufferbuf.WriteByte('[')for i,v :=range values {if i > 0{buf.WriteString(",")}fmt.Fprintf(&buf,"%d",v)}buf.WriteByte(']')returnbuf.String()
}func main() {fmt.Println(intsToString([]int{1,2,3}))
}

printints

    3.5.5 字符串和数字的相互转换

  3.6 常量

    3.6.1 常量生成器iota

    3.6.2 无类型常量

第4章 复合数据类型 (已看)

  4.1 数组

package mainimport ("fmt""crypto/sha256")type Currencyintconst(USD Currency=iotaEURGBPRMB
)func main(){var a [3]intfmt.Println(a[0])fmt.Println(a[len(a)-1])for i,v :=range a {fmt.Printf("%d %d\n",i,v)}for _,v :=range a {fmt.Printf("%d\n",v)}c1 := sha256.Sum256([]byte("x"))c2 := sha256.Sum256([]byte("X"))fmt.Printf("%x\n%x\n%t\n%T\n",c1,c2,c1 ==c2,c1)
}

sha256

  4.2 slice

package mainimport"fmt"func reverse(s []int){for i,j :=0,len(s)-1;i < j;i,j = i+1,j-1{s[i],s[j]=s[j],s[i]}
}func main(){a := [...]int{0,1,2,3,4,5}reverse(a[:])fmt.Println(a)
}

rev

    4.2.1 append函数

package mainimport"fmt"func AppendInt(x []int,y int) []int{var z []intzlen := len(x) + 1if zlen <=cap(x) {z=x[:zlen]}else{zcap :=zlenif zcap < 2*len(x) {zcap= 2 *len(x)}z= make([]int,zlen,zcap)copy(z,x)}z[len(x)]=yreturnz
}func main(){var x,y []intfor i := 0;i < 10;i++{y=AppendInt(x,i)fmt.Printf("%d cap=%d\t%v\n",i,cap(y),y)x=y}
}

append

    4.2.2 slice就地修改

  4.3 map

package mainimport ("bufio""os""fmt")func main() {seen := make(map[string]bool)input :=bufio.NewScanner(os.Stdin)forinput.Scan() {line :=input.Text()if !seen[line] {seen[line]= truefmt.Println(line)}}if err := input.Err();err !=nil {fmt.Fprintf(os.Stderr,"dedup: %v\n",err)os.Exit(1)}
}

dedup

package mainimport ("bufio""fmt""io""os""unicode""unicode/utf8")func main() {counts := make(map[rune]int)var utflen [utf8.UTFMax + 1]intinvalid := 0in :=bufio.NewReader(os.Stdin)for{r,n,err := in.ReadRune()if err ==io.EOF {break}if err !=nil {fmt.Fprintf(os.Stderr,"charcount: %v\n",err)os.Exit(1)}if r == unicode.ReplacementChar && n == 1{invalid++continue}counts[r]++utflen[n]++}fmt.Printf("rune\tcount\n")for c,n :=range counts {fmt.Printf("%q\t%d\n",c,n)}fmt.Print("\nlen\tcount\n")for i,n :=range utflen {if i > 0{fmt.Printf("%d\t%d\n",i,n)}}if invalid > 0{fmt.Printf("\n%d invalid UTF-8 characters\n",invalid)}
}

charcount

var graph = make(map[string]map[string]bool)func addEdge(from,to string) {edges := graph[from]if edges ==nil {edges= make(map[string]bool)graph[from] =edges}edges[to]= true}func hasEdge(from,to string) bool{return graph[from][to]
}

graph  

  4.4 结构体

    4.4.1 结构体字面量

    4.4.2 结构体比较

    4.4.3 结构体嵌套和匿名成员

package mainimport"fmt"type Pointstruct{X,Yint}type Circlestruct{PointRadiusint}type Wheelstruct{CircleSpokesint}func main() {var w = Wheel{Circle{Point{8,8},5},20}fmt.Printf("%#v\n",w)w.X= 42fmt.Printf("%#v\n",w)
}

embed

  4.5 JSON

  4.6 文本和HTML模板

第5章 函数 (已看)

  5.1 函数声明

package mainimport"fmt"func add(xint,y int) int { return x+y }
func sub(x,yint) (z int) { z = x-y; return}
func first(xint,_ int) int { returnx }
func zero(int,int) int { return 0}func main() {fmt.Printf("%T\n",add)fmt.Printf("%T\n",sub)fmt.Printf("%T\n",first)fmt.Printf("%T\n",zero)
}

funcTest

  5.2 递归

  5.3 多返回值

  5.4 错误

    5.4.1 错误处理策略

    5.4.2 文件结束标识

  5.5 函数变量

package mainimport"fmt"func square(nint) int { return n*n }
func negative(nint) int { return -n }
func product(m,nint) int { return m*n }func main() {f :=squarefmt.Println(f(3))fmt.Printf("%T\n",f)f=negativefmt.Println(f(3))fmt.Printf("%T\n",f)}

funcVarTest

  5.6 匿名函数

package mainimport"fmt"func squares() func()int{var x intreturn func() int{x++return x *x}
}func main() {f :=squares()fmt.Println(f())fmt.Println(f())fmt.Println(f())fmt.Println(f())
}

squares

  5.7 变长函数

package mainimport"fmt"func sum(vals ...int) int{total := 0for _,val :=range vals {total+=val}returntotal
}func main() {fmt.Println(sum())fmt.Println(sum(3))fmt.Println(sum(1,2,3,4))
}

sum

  5.8 延迟函数调用

  5.9 宕机

  5.10 恢复

第6章 方法 (已看)

  6.1 方法声明

package mainimport"math"import"fmt"type Pointstruct{ X,Y float64 }func Distance(p,q Point) float64 {return math.Hypot(q.X - p.X,q.Y -p.Y)
}func (p Point) Distance(q Point) float64 {return math.Hypot(q.X - p.X,q.Y -p.Y)
}func main() {p := Point{1,2}q := Point{4,6}fmt.Println(Distance(p,q))fmt.Println(p.Distance(q))
}

geometry

  6.2 指针接收者的方法

  6.3 通过结构体内嵌组成类型

  6.4 方法变量与表达式

p := Point{1,2}
q := Point{4,6}distanceFromP :=p.Distance
fmt.Println(distanceFromP(q))varorgin Point
fmt.Println(distanceFromP(origin))scaleP :=p.ScaleBy
scaleP(2)
scaleP(3)
scaleP(10)

geometryTest1

  6.5 示例:位向量

  6.6 封装

第7章 接口

  7.1 接口即约定

  7.2 接口类型

package iotype Readerinterface{Read(p []byte) (n int,err error)
}type Closerinterface{Close() error
}type ReadWriterinterface{ReaderWriter
}type ReadWriteCloserinterface{ReaderWriterCloser
}type ReadWriterinterface{Read(p []byte) (n int,err error)Write(p []byte) (n int,err error)
}type ReadWriterinterface{Read(p []byte) (n int,err error)Writer
}

interfaceType

  7.3 实现接口

  7.4 使用flag.Value来解析参数

  7.5 接口值

  7.6 使用sort.Interface来排序

  7.7 http.Handle接口

  7.8 error接口

  7.9 示例:表达式求值器

  7.10 类型断言

  7.11 使用类型断言来识别错误

  7.12 通过接口类型断言来查询特性

  7.13 类型分支

  7.14 示例:基于标记的XML解析

  7.15 一些建议

第8章 goroutine和通道

  8.1 goroutine

  8.2 示例:并发时钟服务器

  8.3 示例:并发回声服务器

  8.4 通道

    8.4.1 无缓冲通道

    8.4.2 管道

    8.4.3 单向通道类型

    8.4.4 缓冲通道

  8.5 并行循环

  8.6 示例:并发的Web爬虫

  8.7 使用select多路复用

  8.8 示例:并发目录遍历

  8.9 取消

  8.10 示例:聊天服务器

第9章 使用共享变量实现并发

  9.1 竞态

  9.2 互斥锁:sync.Mutex

  9.3 读写互斥锁:sync.RWMutex

  9.4 内存同步

  9.5 延迟初始化:sync.Once

  9.6 竞态检测器

  9.7 示例:并发非阻塞缓存

  9.8 goroutine与线程

    9.8.1 可增长的栈

    9.8.2 goroutine调度

    9.8.3 GOMAXPROCS

    9.8.4 goroutine没有标识

第10章 包和go工具 (已看)

  10.1 引言

  10.2 导入路径

  10.3 包的声明

  10.4 导入声明

  10.5 空导入

  10.6 包及其命名

  10.7 go工具

    10.7.1 工作空间的组织

    10.7.2 包的下载

    10.7.3 包的构建

    10.7.4 包的文档化

    10.7.5 内部包

    10.7.6 包的查询

第11章 测试

  11.1 go test工具

  11.2 Test函数

    11.2.1 随机测试

    11.2.2 测试命令

    11.2.3 白盒测试

    11.2.4 外部测试包

    11.2.5 编写有效测试

    11.2.6 避免脆弱的测试

  11.3 覆盖率

  11.4 Benchmark函数

  11.5 性能剖析

  11.6 Example函数

第12章 反射

  12.1 为什么使用反射

  12.2 reflect.Type和reflect.Value

package mainimport ("fmt""reflect""os""io")func main() {t := reflect.TypeOf(3)fmt.Println(t.String())fmt.Println(t)fmt.Printf("%T\n",3)v := reflect.ValueOf(3)fmt.Println(v)fmt.Printf("%v\n",v)fmt.Println(v.String())t1 :=v.Type()fmt.Println(t1.String())v1 := reflect.ValueOf(3)fmt.Println(v1)x :=v.Interface()fmt.Println(x)i := x.(int)fmt.Printf("%d\n",i)var w io.Writer =os.Stdoutfmt.Println(reflect.TypeOf(w))}

reflectTest1

package mainimport ("reflect""strconv""fmt""time")func Any(valueinterface{}) string{returnformatAtom(reflect.ValueOf(value))
}func formatAtom(v reflect.Value)string{switchv.Kind() {casereflect.Invalid:return "invalid"casereflect.Int,reflect.Int8,reflect.Int16,reflect.Int32,reflect.Int64:return strconv.FormatInt(v.Int(),10)casereflect.Uint,reflect.Uint8,reflect.Uint16,reflect.Uint32,reflect.Uint64,reflect.Uintptr:return strconv.FormatUint(v.Uint(),10)casereflect.Bool:returnstrconv.FormatBool(v.Bool())casereflect.String:returnstrconv.Quote(v.String())casereflect.Chan,reflect.Func,reflect.Ptr,reflect.Slice,reflect.Map:return v.Type().String() + "0x" + strconv.FormatUint(uint64(v.Pointer()),16)default:return v.Type().String() + "value"}
}func main() {var x int64 = 1var d time.Duration = 1 *time.Nanosecondfmt.Println(Any(x))fmt.Println(Any(d))fmt.Println(Any([]int64{x}))fmt.Println(Any([]time.Duration{d}))
}

format

  12.3 Display:一个递归的值显示器

  12.4 示例:编码S表达式

  12.5 使用reflect.Value来设置值

  12.6 示例:解码S表达式

  12.7 访问结构体字段标签

  12.8 显示类型的方法

  12.9 注意事项

第13章 低级编程

  13.1 unsafe.Sizeof,Alignof和Offsetof

  13.2 unsfae.Pointer

  13.3 示例:深度相等

  13.4 使用cgo调用c代码

  13.5 关于安全的注意事项

转载于:https://www.cnblogs.com/revoid/p/9216666.html

Go程序语言设计 (艾伦 A. A. 多诺万 著)相关推荐

  1. [C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍

    今天是个不错的日子,不仅有人收了我做徒弟从此传授我有关C++的一些知识,由于前一段时间喜欢上了外挂的研究也用到了一些MFC的知识及一些Windows APIs编程,但是对C++还是没有从根本上认识.我 ...

  2. #c++程序语言设计戴波-

    #c++程序语言设计戴波- 第八章:课上实验 时钟类 问题:实现时钟类时构造了函数但是不能用. 解决办法:c++中clock()是C/C++中的计时函数,将clock改成大写的Clock即 可. 修改 ...

  3. 软件中级设计师 - 程序语言设计

    程序设计语言基本概述 程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行 描述.组织和推导. 低级语言:机器语言(计算机硬件只能识别0和1的指令序列),汇编语言. 高级语言:功能 ...

  4. java程序语言设计第三章答案_java语言程序设计课后习题解答张思民第三章

    java语言程序设计课后习题解答张思民第三章 1 第3章 面向对象程序设计基础 [1]什么是 Java 程序使用的类?什么是类库? [解答]:Java 程序的基本单位是类.对象是对事物的抽象,而类是对 ...

  5. python程序格式框架的描述_python 程序语言设计(嵩天)-学习笔记(第二章python 程序实例解析)...

    第 2 章 python 程序实例解析 学习目标: 掌握解决计算问题的一般方法. 掌握python语言的基本语法,包括缩进.变量.命名等. 掌握python语言绘制图形的一般方法. 了解python标 ...

  6. c程序语言设计练习题,C语言程序设计练习题(含程序及参考答案)

    <C语言程序设计练习题(含程序及参考答案)>由会员分享,可在线阅读,更多相关<C语言程序设计练习题(含程序及参考答案)(47页珍藏版)>请在人人文库网上搜索. 1.1.定义一个 ...

  7. python语言的特点强制可读_python程序语言设计第二讲(笔记)

    Python语言程序设计第二讲 1.复习回顾 1.1保留字 1.2温度转换 #宋宇婕宝贝开始编写的第一个程序,温度转换,我来了 TempStr=input("一阵给老子输入带有符号的温度值, ...

  8. 计算机二级java程序语言设计,全国计算机等级考试二级教程:Java语言程序设计(2016年版)...

    由教育部考试中心推出的计算机等级考试是一种客观.公正.科学的专门测试计算机应用人员的计算机知识与技能的全国性考试,它面向社会,服务于社会. <全国计算机等级考试二级教程:Java语言程序设计(2 ...

  9. python程序语言设计教材_Python语言程序设计 - 中国高校教材图书网

    内容简介: 本书以程序设计初学者为教学对象,从程序设计基本概念出发,通过大量程序实例,深入浅出地介绍了Python程序设计的基本概念和方法.全书主要内容包括Python语言概述.Python语言基础. ...

最新文章

  1. 逃离伪PHP程序员应该做的事
  2. Jenkins持续集成输出html测试报告
  3. Java对于SSL的支持以及证书的安装!
  4. 图论--二分图--二分图的定义及其判断定
  5. java 保垒机telnet,开源堡垒机系统Teleport
  6. Cube和Grouping 和Rollup
  7. 接口和抽象类的区别?
  8. caption里面能不能加字体颜色的设置_短视频快速加SRT字幕这事 有几条Pr避坑指南请查收...
  9. uva 10817 - Headmaster's Headache ( 状态压缩dp)
  10. 《Java 程序设计》课堂实践二
  11. 插头dp ——从入门到跳楼
  12. G729调用方法及使用wavlib播放出现颤音的解决方法
  13. pvr图片格式如何打开
  14. 14015problem I 方案数
  15. 服务注册与发现-全搞懂
  16. 2020年春分,新的开始
  17. 计算机软考抵个税,软考证书怎么来抵扣个税
  18. 电视剧《天道》里的商业思维
  19. Emacs 从入门到精通
  20. Java代码混淆工具-ProGuard

热门文章

  1. STL::atomic原子操作
  2. 阿里云服务器搭建python web环境_《Python入门》Linux 下 Python Web开发环境搭建笔记-阿里云开发者社区...
  3. java list集合自定义排序_Java 通过 Comparator comparing 对 list 自定义 排序
  4. C++实现超分辨率 IDN
  5. 关于淘宝购物的一点心得
  6. 计算机病毒论文7000字,计算机病毒解析与防范.doc
  7. 一天一个管理小故事 之二 《鲶鱼效应 》
  8. centos7 网卡配置vlan_centos7 配置vlan trunk口
  9. 交换机不配access口能通吗_交换机Access口与Trunk口的基本概念
  10. 变形金刚——Transformer入门刨析详解