第1章 入门  (已看)

  1.1 hello,world

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main(){
  6. fmt.Println("Hello,World")
  7. }

Hello,World

$go run HelloWorld.go

$go build HelloWorld.go

  1.2 命令行参数

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "os"
  6. )
  7.  
  8. func main(){
  9. var s,sep string
  10. ; i < len(os.Args);i++ {
  11. s += sep + os.Args[i]
  12. sep = " "
  13. }
  14. fmt.Println(s)
  15. }

echo1

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "os"
  6. )
  7.  
  8. func main(){
  9. s,sep:="",""
  10. :] {
  11. s += sep + arg
  12. sep = " "
  13. }
  14. fmt.Println(s)
  15. }

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 浮点数

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7.  
  8. const (
  9. width,height = ,
  10. cells =
  11. xyrange = 30.0
  12. xyscale = width//xyrange
  13. zscale = height * 0.4
  14. angle = math.Pi /
  15. )
  16.  
  17. var sin30,cos30 = math.Sin(angle),math.Cos(angle)
  18.  
  19. func main(){
  20. fmt.Printf("<svg xmlns = 'http://www.w3.org/2000svg' " +
  21. "style='stroke:grey;fill:white;stroke-width:0.7' " +
  22. "width='%d' height='%d'>",width,height)
  23.  
  24. ; i < cells; i++ {
  25. ;j < cells;j++ {
  26. ax,ay := corner(i+,j)
  27. bx,by := corner(i,j)
  28. cx,cy := corner(i,j+)
  29. dx,dy := corner(i+,j+)
  30. fmt.Printf("<polygon points='%g,%g %g,%g %g,%g %g,%g'/>\n",
  31. ax,ay,bx,by,cx,cy,dx,dy)
  32. }
  33. }
  34. fmt.Println("</svg>")
  35. }
  36.  
  37. func corner(i,j int)(float64,float64) {
  38. x := xyrange * (float64(i)/cells-0.5)
  39. y := xyrange * (float64(j)/cells-0.5)
  40.  
  41. z := f(x,y)
  42. sx := width/ + (x-y)*cos30*xyscale
  43. sy := height/ + (x+y)*sin30*xyscale - z*zscale
  44. return sx,sy
  45. }
  46.  
  47. func f(x,y float64) float64 {
  48. r := math.Hypot(x,y)
  49. return math.Sin(r)
  50. }

surface

  3.3 复数

  1. package main
  2.  
  3. import (
  4. "image"
  5. "image/color"
  6. "image/png"
  7. "math/cmplx"
  8. "os"
  9. )
  10.  
  11. func main(){
  12. const (
  13. xmin,ymin,xmax,ymax = -,-,+,+
  14. width,height = ,
  15. )
  16.  
  17. img := image.NewRGBA(image.Rect(,,width,height))
  18. ;py < height;py++ {
  19. y := float64(py)/height*(ymax-ymin)
  20. ;px < width;px++ {
  21. x := float64(px)/width*(xmax-xmin) + xmin
  22. z := complex(x,y)
  23.  
  24. img.Set(px,py,mandelbrot(z))
  25. }
  26. }
  27. png.Encode(os.Stdout,img)
  28. }
  29.  
  30. func mandelbrot(z complex128) color.Color {
  31.  
  32. var v complex128
  33. );n < iterations;n++ {
  34. v = v*v + z
  35. {
  36. - contrast*n}
  37. }
  38. }
  39. return color.Black
  40. }

mandelbrot

  3.4 布尔值

  3.5 字符串

    3.5.1 字符串字面量

    3.5.2 Unicode

    3.5.3 UTF-8

    3.5.4 字符串和字节slice

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "bytes"
  6. )
  7.  
  8. func intsToString(values []int) string {
  9. var buf bytes.Buffer
  10. buf.WriteByte('[')
  11. for i,v := range values {
  12. {
  13. buf.WriteString(", ")
  14. }
  15. fmt.Fprintf(&buf,"%d",v)
  16. }
  17. buf.WriteByte(']')
  18. return buf.String()
  19. }
  20.  
  21. func main() {
  22. fmt.Println(intsToString([],,}))
  23. }

printints

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

  3.6 常量

    3.6.1 常量生成器iota

    3.6.2 无类型常量

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

  4.1 数组

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "crypto/sha256"
  6. )
  7.  
  8. type Currency int
  9.  
  10. const (
  11. USD Currency = iota
  12. EUR
  13. GBP
  14. RMB
  15. )
  16.  
  17. func main(){
  18.  
  19. ]int
  20. fmt.Println(a[])
  21. fmt.Println(a[len(a)-])
  22.  
  23. for i,v := range a {
  24. fmt.Printf("%d %d\n",i,v)
  25. }
  26.  
  27. for _,v := range a {
  28. fmt.Printf("%d\n",v)
  29. }
  30.  
  31. c1 := sha256.Sum256([]byte("x"))
  32. c2 := sha256.Sum256([]byte("X"))
  33.  
  34. fmt.Printf("%x\n%x\n%t\n%T\n",c1,c2,c1 == c2,c1)
  35. }

sha256

  4.2 slice

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func reverse(s []int){
  6. ,len(s)-;i < j;i,j = i+,j- {
  7. s[i],s[j] = s[j],s[i]
  8. }
  9. }
  10.  
  11. func main(){
  12. a := [...],,,,,}
  13. reverse(a[:])
  14. fmt.Println(a)
  15. }

rev

    4.2.1 append函数

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func AppendInt(x []int,y int) []int {
  6. var z []int
  7. zlen := len(x) +
  8. if zlen <= cap(x) {
  9. z = x[:zlen]
  10. } else {
  11. zcap := zlen
  12. *len(x) {
  13. zcap = * len(x)
  14. }
  15. z = make([]int,zlen,zcap)
  16. copy(z,x)
  17. }
  18. z[len(x)] = y
  19. return z
  20. }
  21.  
  22. func main(){
  23. var x,y []int
  24. ;i < ;i++ {
  25. y = AppendInt(x,i)
  26. fmt.Printf("%d cap=%d\t%v\n",i,cap(y),y)
  27. x = y
  28. }
  29. }

append

    4.2.2 slice就地修改

  4.3 map

  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "os"
  6. "fmt"
  7. )
  8.  
  9. func main() {
  10. seen := make(map[string]bool)
  11. input := bufio.NewScanner(os.Stdin)
  12.  
  13. for input.Scan() {
  14. line := input.Text()
  15. if !seen[line] {
  16. seen[line] = true
  17. fmt.Println(line)
  18. }
  19. }
  20.  
  21. if err := input.Err();err != nil {
  22. fmt.Fprintf(os.Stderr,"dedup: %v\n",err)
  23. os.Exit()
  24. }
  25. }

dedup

  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "io"
  7. "os"
  8. "unicode"
  9. "unicode/utf8"
  10. )
  11.  
  12. func main() {
  13. counts := make(map[rune]int)
  14. ]int
  15. invalid :=
  16.  
  17. in := bufio.NewReader(os.Stdin)
  18. for {
  19. r,n,err := in.ReadRune()
  20. if err == io.EOF {
  21. break
  22. }
  23. if err != nil {
  24. fmt.Fprintf(os.Stderr,"charcount: %v\n",err)
  25. os.Exit()
  26. }
  27. {
  28. invalid++
  29. continue
  30. }
  31. counts[r]++
  32. utflen[n]++
  33. }
  34. fmt.Printf("rune\tcount\n")
  35. for c,n := range counts {
  36. fmt.Printf("%q\t%d\n",c,n)
  37. }
  38. fmt.Print("\nlen\tcount\n")
  39. for i,n := range utflen {
  40. {
  41. fmt.Printf("%d\t%d\n",i,n)
  42. }
  43. }
  44. {
  45. fmt.Printf("\n%d invalid UTF-8 characters\n",invalid)
  46. }
  47. }

charcount

  1. var graph = make(map[string]map[string]bool)
  2.  
  3. func addEdge(from,to string) {
  4. edges := graph[from]
  5. if edges == nil {
  6. edges = make(map[string]bool)
  7. graph[from] = edges
  8. }
  9. edges[to] = true
  10. }
  11.  
  12. func hasEdge(from,to string) bool {
  13. return graph[from][to]
  14. }

graph  

  4.4 结构体

    4.4.1 结构体字面量

    4.4.2 结构体比较

    4.4.3 结构体嵌套和匿名成员

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Point struct {
  6. X,Y int
  7. }
  8.  
  9. type Circle struct {
  10. Point
  11. Radius int
  12. }
  13.  
  14. type Wheel struct {
  15. Circle
  16. Spokes int
  17. }
  18.  
  19. func main() {
  20. ,},},}
  21.  
  22. fmt.Printf("%#v\n",w)
  23. w.X =
  24. fmt.Printf("%#v\n",w)
  25. }

embed

  4.5 JSON

  4.6 文本和HTML模板

第5章 函数 (已看)

  5.1 函数声明

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func add(x int,y int) int { return x+y }
  6. func sub(x,y int) (z int) { z = x-y; return }
  7. func first(x int,_ int) int { return x }
  8. func zero( }
  9.  
  10. func main() {
  11. fmt.Printf("%T\n",add)
  12. fmt.Printf("%T\n",sub)
  13. fmt.Printf("%T\n",first)
  14. fmt.Printf("%T\n",zero)
  15. }

funcTest

  5.2 递归

  5.3 多返回值

  5.4 错误

    5.4.1 错误处理策略

    5.4.2 文件结束标识

  5.5 函数变量

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func square(n int) int { return n*n }
  6. func negative(n int) int { return -n }
  7. func product(m,n int) int { return m*n }
  8.  
  9. func main() {
  10. f := square
  11. fmt.Println(f())
  12. fmt.Printf("%T\n",f)
  13.  
  14. f = negative
  15. fmt.Println(f())
  16. fmt.Printf("%T\n",f)
  17.  
  18. }

funcVarTest

  5.6 匿名函数

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func squares() func() int {
  6. var x int
  7. return func() int {
  8. x++
  9. return x * x
  10. }
  11. }
  12.  
  13. func main() {
  14. f := squares()
  15. fmt.Println(f())
  16. fmt.Println(f())
  17. fmt.Println(f())
  18. fmt.Println(f())
  19. }

squares

  5.7 变长函数

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func sum(vals ...int) int {
  6. total :=
  7. for _,val := range vals {
  8. total += val
  9. }
  10. return total
  11. }
  12.  
  13. func main() {
  14. fmt.Println(sum())
  15. fmt.Println(sum())
  16. fmt.Println(sum(,,,))
  17. }

sum

  5.8 延迟函数调用

  5.9 宕机

  5.10 恢复

第6章 方法 (已看)

  6.1 方法声明

  1. package main
  2.  
  3. import "math"
  4. import "fmt"
  5.  
  6. type Point struct{ X,Y float64 }
  7.  
  8. func Distance(p,q Point) float64 {
  9. return math.Hypot(q.X - p.X,q.Y - p.Y)
  10. }
  11.  
  12. func (p Point) Distance(q Point) float64 {
  13. return math.Hypot(q.X - p.X,q.Y - p.Y)
  14. }
  15.  
  16. func main() {
  17. p := Point{,}
  18. q := Point{,}
  19.  
  20. fmt.Println(Distance(p,q))
  21. fmt.Println(p.Distance(q))
  22. }

geometry

  6.2 指针接收者的方法

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

  6.4 方法变量与表达式

  1. p := Point{,}
  2. q := Point{,}
  3.  
  4. distanceFromP := p.Distance
  5. fmt.Println(distanceFromP(q))
  6. var orgin Point
  7. fmt.Println(distanceFromP(origin))
  8.  
  9. scaleP := p.ScaleBy
  10. scaleP()
  11. scaleP()
  12. scaleP()

geometryTest1

  6.5 示例:位向量

  6.6 封装

第7章 接口

  7.1 接口即约定

  7.2 接口类型

  1. package io
  2.  
  3. type Reader interface {
  4. Read(p []byte) (n int,err error)
  5. }
  6.  
  7. type Closer interface {
  8. Close() error
  9. }
  10.  
  11. type ReadWriter interface {
  12. Reader
  13. Writer
  14. }
  15.  
  16. type ReadWriteCloser interface {
  17. Reader
  18. Writer
  19. Closer
  20. }
  21.  
  22. type ReadWriter interface {
  23. Read(p []byte) (n int,err error)
  24. Write(p []byte) (n int,err error)
  25. }
  26.  
  27. type ReadWriter interface {
  28. Read(p []byte) (n int,err error)
  29. Writer
  30. }

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

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. "os"
  7. "io"
  8. )
  9.  
  10. func main() {
  11. t := reflect.TypeOf()
  12. fmt.Println(t.String())
  13. fmt.Println(t)
  14. fmt.Printf()
  15.  
  16. v := reflect.ValueOf()
  17. fmt.Println(v)
  18. fmt.Printf("%v\n",v)
  19. fmt.Println(v.String())
  20.  
  21. t1 := v.Type()
  22. fmt.Println(t1.String())
  23.  
  24. v1 := reflect.ValueOf()
  25. fmt.Println(v1)
  26. x := v.Interface()
  27. fmt.Println(x)
  28. i := x.(int)
  29. fmt.Printf("%d\n",i)
  30.  
  31. var w io.Writer = os.Stdout
  32. fmt.Println(reflect.TypeOf(w))
  33.  
  34. }

reflectTest1

  1. package main
  2.  
  3. import (
  4. "reflect"
  5. "strconv"
  6. "fmt"
  7. "time"
  8. )
  9.  
  10. func Any(value interface{}) string {
  11. return formatAtom(reflect.ValueOf(value))
  12. }
  13.  
  14. func formatAtom(v reflect.Value) string {
  15. switch v.Kind() {
  16. case reflect.Invalid:
  17. return "invalid"
  18. case reflect.Int,reflect.Int8,reflect.Int16,reflect.Int32,reflect.Int64:
  19. )
  20. case reflect.Uint,reflect.Uint8,reflect.Uint16,reflect.Uint32,reflect.Uint64,reflect.Uintptr:
  21. )
  22. case reflect.Bool:
  23. return strconv.FormatBool(v.Bool())
  24. case reflect.String:
  25. return strconv.Quote(v.String())
  26. case reflect.Chan,reflect.Func,reflect.Ptr,reflect.Slice,reflect.Map:
  27. )
  28. default:
  29. return v.Type().String() + " value"
  30. }
  31. }
  32.  
  33. func main() {
  34.  
  35. * time.Nanosecond
  36. fmt.Println(Any(x))
  37. fmt.Println(Any(d))
  38. fmt.Println(Any([]int64{x}))
  39. fmt.Println(Any([]time.Duration{d}))
  40. }

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 关于安全的注意事项

Go程序语言设计 (艾伦 A. A. 多诺万 著)的更多相关文章

  1. LZZ高级程序语言设计之多重for循环

    public class Mq { public static void main(String args[]) { System.out.println("到底去还是不去呢?") ...

  2. C语言程序与设计:统计素数并求和

    目录 C语言程序与设计:统计素数并求和 1.题目要求 2.分析 3.代码 C语言程序与设计:统计素数并求和 1.题目要求 输入两个正整数 m 和 n(1≤m≤n≤500),统计给定整数 m 和 n 区 ...

  3. atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质

    atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质 #---语言的 工具和材料双重性 有的人说语言是个工具,有的人说语言是个材料..实际上语言同时属于两个属性. ...

  4. BT雷人的程序语言

    原文:http://cocre.com/?p=1142  酷壳 这个世界从来都不会缺少另类的东西,人类自然世界如此,计算机世界也一样.编程语言方面,看过本站<6个变态的C语言Hello Worl ...

  5. 6个变态的C语言Hello World程序 之 雷人的程序语言

    以下的六个程序片段主要完毕这些事情: 输出Hello, World 混乱C语言的源码 以下的全部程序都能够在GCC下编译通过,仅仅有最后一个须要动用C++的编译器g++才干编程通过. hello1.c ...

  6. 《Java从入门到失业》第一章:计算机基础知识(三):程序语言简介

    1.3程序语言简介 我们经常会听到一些名词:低级语言.高级语言.编译型.解释型.面向过程.面向对象等.这些到底是啥意思呢?在正式进入Java世界前,笔者也尝试简单的聊一聊这块东西. 1.3.1低级语言 ...

  7. 【一月一本技术书】-【Go语言设计与实现】- 9月

    Go : 2009.11.10 代表作:Docker.k8s.etcd 模仿C语言,目标:互联网的C语言 讲的晦涩难懂....硬板..放弃了好几次才读完.满分10分,打6分. 下个月:Python数据 ...

  8. Java学习笔记13---一个循环程序的设计范例

    package welcome; import java.util.Scanner; /* * 一个循环程序的设计范例 * 首先编写仅执行一次的程序(当无循环时) * 循环的设计步骤: * 1.确定程 ...

  9. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...

随机推荐

  1. jdk8-lanbda方法引用和构造引用

    1.方法引用概念及实例 1.对象实例方法 语法格式: 对象::实例方法名称 注意点: 实例方法必须和被实现的接口中定义的方法的参数列表和返回值一致.一般适合于一个方法就实现了的. 2.类::静态方法 ...

  2. Python发送四种格式的post请求的代码样例

    x-www-form-urlencoded: path = "/api/v1/topics/update"params={'accesstoken':'d38a77f0-6f29- ...

  3. SQL-40 表中新增一列

    题目描述 存在actor表,包含如下列信息:CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5) NOT NULL PRIMARY KEY,fi ...

  4. DM浅尝辄止

    都是大佬的笔记啊啊啊啊 dialog management 对话状态维护(dialog state tracking, DST) 生成系统决策(dialog policy) 系统行为(dialog a ...

  5. 适用于WIFI Hacking的无线网卡推荐

    相信很多初次使用Kali Linux来进行无线渗透的小伙伴都曾遇到过一个非常头疼的问题,就是不知道如何选购一款合适的无线网卡.因为Kali Linux并不是所有的网卡都支持,一旦选错了网卡不仅会给我们 ...

  6. POJ 1065 Wooden Sticks (贪心)

    There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The st ...

  7. 【Python】混合驱动实例

    keywords2.txt: get||ie||{urls.txt} get||chrome||http://www.iciba.com main.py: from selenium import w ...

  8. OAuth和OpenID的区别

    OAuth关注的是authorization:而OpenID侧重的是authentication.从表面上看,这两个英文单词很容易混淆,但实际上,它们的含义有本质的区别: authorization: ...

  9. [转]ZooKeeper学习第一期---Zookeeper简单介绍

    ZooKeeper学习第一期---Zookeeper简单介绍 http://www.cnblogs.com/sunddenly/p/4033574.html 一.分布式协调技术 在给大家介绍ZooKe ...

  10. Selenium之ActionChains (二)

    今天,为大家介绍的是标题中的三个新方法,以及一个老方法 以下方法都需要操作一个名为Keys的包,先来简单认识下 Keys key_down(value,element),key_up(value,el ...