一.变量

1.声明变量

变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。

  1. Go语言引入了关键字var,而类型信息放在变量名之后,变量声明语句不需要使用分号作为结束符,示例如下:
  2. var v1 int
  3. var v2 string
  4. var v3 [10]int // 数组
  5. var v4 []int // 数组切片
  6. var v5 struct {
  7. f int
  8. }
  9. var v6 *int // 指针
  10. var v7 map[string]int // map, key为string类型, value为int类型
  11. var v8 func(a int) int

var关键字的另一种用法是可以将若干个需要声明的变量放置在一起,免得程序员需要重复

写var关键字,如下所示:

  1. var (
  2. v1 int
  3. v2 string
  4. )

对于声明变量时需要进行初始化的场景, var关键字可以保留,但不再是必要的元素:

  1. var v1 int = 10 // 正确的使用方式1
  2. var v2 = 10 // 正确的使用方式2,编译器可以自动推导出v2的类型
  3. v3 := 10 // 正确的使用方式3,编译器可以自动推导出v3的类型

冒号和等号的组合:=,用于明确表达同时进行变量声明和初始化的工作。

不能重复声明:

  1. var i int
  2. i := 2
  3. 会导致类似如下的编译错误:
  4. no new variables on left side of :=

2.匿名变量

_是特殊标识符,用来忽略结果

  1. package main
  2. import(
  3. "fmt"
  4. )
  5. func cal(a int, b int)(int,int) {
  6. sum := a + b
  7. avg := (a+b)/2
  8. return sum, avg
  9. }
  10. func main() {
  11. _,avg := cal(100,200)
  12. fmt.Println(avg)
  13. }

二、常量

在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。

  1. const Pi float64 = 3.14159265358979323846
  2. const zero = 0.0 // 无类型浮点常量
  3. const (
  4. size int64 = 1024
  5. eof = -1 // 无类型整型常量
  6. )
  7. const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
  8. const a, b, c = 3, 4, "foo"
  9. // a = 3, b = 4, c = "foo", 无类型整型和字符串常量

定义两个常量a=1和b=2,获取当前时间的秒数,如果能被b整除,则在终端打印b,否则打印a。

  1. package main
  2. import(
  3. "fmt"
  4. "time"
  5. )
  6. const (
  7. a = 1
  8. b = 2
  9. )
  10. func main() {
  11. for {
  12. second := time.Now().Unix()
  13. fmt.Print(second," ")
  14. if (second % b == 0) {
  15. fmt.Println("b")
  16. } else {
  17. fmt.Println("a")
  18. }
  19. time.Sleep(1000 * time.Millisecond)
  20. }
  21. }

三、数据类型

1.整型

  1. 长度(字节)
  2. int8 1 -128 ~ 127
  3. uint8(即byte 1 0 ~ 255
  4. int16 2 -32768 ~ 32767
  5. uint16 2 0 ~ 65535
  6. int32 4 -2147483648 ~ 2147483647
  7. uint32 4 0 ~ 4294967295
  8. int64 8 -9223372036854775808 ~ 9223372036854775807
  9. uint64 8 0 ~ 18446744073709551615
  10. int 平台相关 平台相关
  11. uint 平台相关 平台相关
  12. uintptr 同指针 32位平台下为4字节, 64位平台下为8字节

对于常规的开发来说,用int和uint就可以了,没必要用int8之类明确指定长度的类型,以免导致移植困难。

  1. var value2 int32
  2. value1 := 64 // value1将会被自动推导为int类型
  3. value2 = value1 // 编译错误
  4. 编译错误类似于:
  5. cannot use value1 (type int) as type int32 in assignment
  6. 使用强制类型转换可以解决这个编译错误:
  7. value2 = int32(value1) // 编译通过

eg:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var n int16 = 16
  5. var m int32
  6. //m=n
  7. m= int32(n)
  8. fmt.Printf("32 bit int:%d\n",m)
  9. fmt.Printf("16 bit int:%d\n",n)
  10. }

2.bool

  1. var v1 bool
  2. v1 = true
  3. v2 := (1 == 2) // v2也会被推导为bool类型
  4. var b bool
  5. b = (1!=0) // 编译正确
  6. fmt.Println("Result:", b) // 打印结果为Result: true

3.数值运算

  1. Go语言支持下面的常规整数运算: +、 -、 *、 /和%。 % 和在C语言中一样是求余运算,比如:
  2. 5 % 3 // 结果为: 2

4.浮点型

Go语言定义了两个类型float32和float64,其中float32等价于C语言的float类型,float64等价于C语言的double类型。

  1. var f1 float32
  2. f1 = 12
  3. f2 := 12.0 // 如果不加小数点, f2会被推导为整型而不是浮点型
  4. f1 = float32(f2)//强制类型转换

因为浮点数不是一种精确的表达方式,所以像整型那样直接用==来判断两个浮点数是否相等是不可行的,这可能会导致不稳定的结果。

下面是一种推荐的替代方案:

  1. import "math"
  2. // p为用户自定义的比较精度,比如0.00001
  3. func IsEqual(f1, f2, p float64) bool {
  4. return math.Fdim(f1, f2) < p
  5. }

练习:使用math/rand生成10个随机整数,10个小于100的随机整数以及10个随机浮点数

  1. package main
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "time"
  6. )
  7. func init() {
  8. rand.Seed(time.Now().UnixNano())
  9. }
  10. func main() {
  11. for i := 0; i < 10; i++ {
  12. a := rand.Int()
  13. fmt.Println(a)
  14. }
  15. for i := 0; i < 10; i++ {
  16. a := rand.Intn(100)
  17. fmt.Println(a)
  18. }
  19. for i := 0; i < 10; i++ {
  20. a := rand.Float32()
  21. fmt.Println(a)
  22. }
  23. }

5.字符

在Go语言中支持两个字符类型,一个是byte(实际上是uint8的别名),代表UTF-8字符串,的单个字节的值;另一个是rune,代表单个Unicode字符。 出于简化语言的考虑, Go语言的多数API都假设字符串为UTF-8编码。尽管Unicode字符在标准库中有支持,但实际上较少使用。

byte.go

  1. package main
  2. import "fmt"
  3. func main() {
  4. var b byte
  5. for b =0;b<177;b++{
  6. fmt.Printf("%d %c\n",b,b)
  7. }
  8. }

rune.go

  1. package main
  2. import "fmt"
  3. func main() {
  4. // byte => uint8
  5. // rune => int32
  6. s := "golang你好"
  7. fmt.Println(len(s))
  8. cnt := 0
  9. for _, r := range s {
  10. cnt += 1
  11. fmt.Printf("%c\n", r)
  12. }
  13. fmt.Println("cnt", cnt)
  14. ss := []rune("hello")
  15. fmt.Println(ss)
  16. }

6.字符串类型

  1. package main
  2. import "fmt"
  3. func main() {
  4. str := "Hello,世界"
  5. n := len(str)
  6. fmt.Println(n)
  7. for i := 0; i < n; i++ {
  8. ch := str[i] // 依据下标取字符串中的字符,类型为byte
  9. fmt.Println(i, ch)
  10. }
  11. fmt.Println("///////////////////////////")
  12. str1 := "Hello,世界"
  13. for i, ch := range str1 {
  14. fmt.Println(i, ch)//ch的类型为rune
  15. }
  16. }
  17. /*
  18. 12
  19. 0 72
  20. 1 101
  21. 2 108
  22. 3 108
  23. 4 111
  24. 5 44
  25. 6 228
  26. 7 184
  27. 8 150
  28. 9 231
  29. 10 149
  30. 11 140
  31. ///////////////////////////
  32. 0 72
  33. 1 101
  34. 2 108
  35. 3 108
  36. 4 111
  37. 5 44
  38. 6 19990
  39. 9 30028
  40. */

以字节数组的方式遍历 :这个字符串长度为12。尽管从直观上来说,这个字符串应该只有10个字符。这是因为每个中文字符在UTF-8中占3个字节,而不是1个字节。

以Unicode字符遍历: 以Unicode字符方式遍历时,每个字符的类型是rune(早期的Go语言用int类型表示Unicode字符),而不是byte。

四、值类型和引用类型

值类型:基本数据类型int、float、bool、string以及数组和struct。

引用类型:指针、slice、map、chan等都是引用类型。

值语义和引用语义的差别在于赋值,比如下面的例子:

b = a

b.Modify()

如果b的修改不会影响a的值,那么此类型属于值类型。如果会影响a的值,那么此类型是引用类型。

Go语言中的大多数类型都基于值语义,包括:

基本类型,如byte、 int、 bool、 float32、 float64和string等;

复合类型,如数组(array)、结构体(struct)和指针(pointer)等。

  1. package main
  2. import "fmt"
  3. func main(){
  4. var a = [3]int{1, 2, 3}
  5. var b = a
  6. b[1]++
  7. fmt.Println(a)// [1 2 3]
  8. fmt.Println(b)//[1 3 3]
  9. }

b=a赋值语句是数组内容的完整复制。要想表达引用,需要用指针

  1. package main
  2. import "fmt"
  3. func main(){
  4. var a = [3]int{1, 2, 3}
  5. var b = a
  6. var c = &a
  7. b[1]++
  8. c[1]++
  9. fmt.Println(a)
  10. fmt.Println(b)
  11. fmt.Println(*c)
  12. /*
  13. [1 3 3]
  14. [1 3 3]
  15. [1 3 3]
  16. */
  17. }

c=&a赋值语句是数组内容的引用。变量c的类型不是[3]int,而是*[3]int类型

练习:写一个程序用来打印值类型和引用类型变量到终端,并观察输出结果

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func modify(a int) {
  6. a = 50
  7. return
  8. }
  9. func modify1(a *int) {
  10. *a = 500
  11. }
  12. func main() {
  13. a := 5
  14. b := make(chan int, 1)
  15. fmt.Println("a=", a)
  16. fmt.Println("b=", b)
  17. modify(a)
  18. fmt.Println("a=", a)
  19. modify1(&a)
  20. fmt.Println("a=", a)
  21. }

练习:写一个程序,交换两个整数的值。

  1. package main
  2. import "fmt"
  3. func swap(a int, b int) {
  4. tmp := a
  5. a = b
  6. b = tmp
  7. return
  8. }
  9. func main() {
  10. one := 1
  11. two := 2
  12. swap(one,two)
  13. fmt.Println("one=",one)
  14. fmt.Println("two=",two)
  15. }

傻眼了,不变!加星号!

  1. package main
  2. import "fmt"
  3. func swap(a *int, b *int) {
  4. tmp := *a
  5. *a = *b
  6. *b = tmp
  7. return
  8. }
  9. func swap2(a int,b int) (int,int){
  10. return b,a
  11. }
  12. func main() {
  13. one := 1
  14. two := 2
  15. swap(&one,&two)
  16. //one,two=swap2(one,two)
  17. //one,two=two,one
  18. fmt.Println(one,two)
  19. }

五、变量的作用域

1、在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部。

2、在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的,则作用于整个程序。

  1. package main
  2. import "fmt"
  3. var a = "Greg"
  4. func aa() {
  5. fmt.Println(a)
  6. }
  7. func ab() {
  8. a = "ningxin"
  9. fmt.Println(a)
  10. }
  11. func ac() {
  12. a := 2
  13. fmt.Println(a)
  14. }
  15. func main() {
  16. aa()
  17. ac()
  18. aa()
  19. ab()
  20. aa()
  21. }

a := 2不可能是全局变量,因为这不是声明,而是执行代码,代码块要在函数里,go程序从上到下代码块外的部分只能是声明。

  1. var a int
  2. a=2

输出什么?

  1. package main
  2. import "fmt"
  3. var a string
  4. func f1() {
  5. a := "ningxin"
  6. fmt.Println(a)
  7. f2()
  8. }
  9. func f2() {
  10. fmt.Println(a)
  11. }
  12. func main() {
  13. a = "greg"
  14. fmt.Println(a)
  15. f1()
  16. }

数组

1.数组:是同一种数据类型的固定长度的序列。

2.数组定义:var a [len]int,比如:var a[5]int

  1. package main
  2. import (
  3. "fmt"
  4. "unsafe"
  5. )
  6. func main() {
  7. a1:=[3]int{1,2,3}
  8. fmt.Println(a1)
  9. var a2 [3]int
  10. a2=a1
  11. fmt.Println(a2)
  12. fmt.Println(a1==a2)
  13. fmt.Println(&a1[0],&a2[0])
  14. fmt.Println(unsafe.Sizeof(a1))
  15. var n1,n2 int
  16. n2=n1
  17. fmt.Println(n1,n2)
  18. fmt.Println(&n1,&n2)
  19. var x1,x2 *int
  20. x2=x1
  21. fmt.Println(x1,x2)
  22. fmt.Printf("%x\n",255)
  23. fmt.Println("/////////////数组初始化/////////////////")
  24. var q [3]int = [3]int{1,2,3}
  25. var r [3]int = [3]int{1,2}
  26. fmt.Println(q)
  27. fmt.Println(r)
  28. fmt.Println(r[2])
  29. q1 := [...]int{1,2,3,4}
  30. fmt.Println(q1)
  31. q2 := [...]int{4:2,10:-1}
  32. fmt.Println(q2)
  33. }

3.长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型

4.数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1

  1. package main
  2. import "fmt"
  3. func main(){
  4. i:=2
  5. var a [3]int
  6. fmt.Println(a)
  7. fmt.Println(a[len(a)-1])
  8. fmt.Println(a[i])
  9. fmt.Println("###############")
  10. for i :=range a {
  11. fmt.Println(i)
  12. }
  13. fmt.Println("###############")
  14. for i,v :=range a {
  15. fmt.Printf("%d %d\n",i,v)
  16. }
  17. fmt.Println("###############")
  18. for _,v := range a{
  19. fmt.Printf("%d\n",v)
  20. }
  21. }

数组的应用--md5

  1. package main
  2. import (
  3. "fmt"
  4. "crypto/md5"
  5. )
  6. func main() {
  7. data :=[]byte("hello")
  8. fmt.Println(data)
  9. md5sum :=md5.Sum(data)
  10. fmt.Printf("%v\n",md5sum)
  11. fmt.Printf("%x\n",md5sum)
  12. }

数组初始化

  1. package main
  2. import "fmt"
  3. //数组初始化
  4. func testArray() {
  5. var a [5]int = [5]int{1, 2, 3, 4, 5}
  6. var a1 = [5]int{1, 2, 3, 4, 5}
  7. var a2 = [...]int{1,2,3,4,5,6,7,0,10}
  8. var a3 = [...]int{1: 100, 3: 200}
  9. var a4 = [...]string{1: "hello", 3: "world"}
  10. fmt.Println(a)
  11. fmt.Println(a1)
  12. fmt.Println(a2)
  13. fmt.Println(a3)
  14. fmt.Println(a4)
  15. }
  16. //多维数组
  17. func testArray2() {
  18. var a [2][5]int = [...][5]int{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}
  19. for row, v := range a {
  20. for col, v1 := range v {
  21. fmt.Printf("(%d,%d)=%d ", row, col, v1)
  22. }
  23. fmt.Println()
  24. }
  25. }
  26. func main() {
  27. testArray()
  28. fmt.Println("///////////////////////////")
  29. testArray2()
  30. }

切片

数组的长度在定义之后无法再次修改;数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法完全满足开发者的真实需求。

数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针。数组切片的数据结构可以抽象为以下3个变量:

一个指向原生数组的指针;

数组切片中的元素个数;

数组切片已分配的存储空间。

切片的内存布局

  1. package main
  2. import "fmt"
  3. func main(){
  4. primes := [6]int{10,9,8,7,6,5}
  5. var s []int = primes[1:4]
  6. fmt.Println(primes)
  7. fmt.Println(s)
  8. fmt.Println(&s[0])
  9. fmt.Println(&primes[1])
  10. var s1 []int
  11. s1=s
  12. fmt.Println(&s1[0])
  13. fmt.Println(&s1[0]==&s[0])
  14. /*
  15. [10 9 8 7 6 5]
  16. [9 8 7]
  17. 0xc042066038
  18. 0xc042066038
  19. 0xc042066038
  20. true
  21. */
  22. }

通过make来创建切片

var slice []type = make([]type, len)

slice := make([]type, len)

slice := make([]type, len, cap)

  1. package main
  2. import "fmt"
  3. func main() {
  4. s :=make([]int,5,10)
  5. //创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间
  6. //cap()函数返回的是数组切片分配的空间大小,而len()函数返回的是数组切片中当前所存储的元素个数
  7. fmt.Println(len(s),cap(s))
  8. s=append(s,1)
  9. fmt.Println(s)
  10. s = append(s,2,3,4)
  11. fmt.Println(s)
  12. s1 := []int{13,14,15}
  13. s = append(s,s1...)
  14. fmt.Println(s)
  15. fmt.Println(len(s),cap(s))
  16. }

用append内置函数操作切片

  1. package main
  2. import "fmt"
  3. func testSlice() {
  4. var a [5]int = [...]int{1, 2, 3, 4, 5}
  5. s := a[1:]
  6. fmt.Printf("before cap len[%d] cap[%d]\n", len(s), cap(s))
  7. s[1] = 100
  8. fmt.Println(s,a[1])
  9. fmt.Printf("s=%p a[1]=%p\n", s, &a[1])
  10. fmt.Println("before a:", a)
  11. s = append(s, 10)
  12. s = append(s, 10)
  13. fmt.Printf("after cap len[%d] cap[%d]\n", len(s), cap(s))
  14. s = append(s, 10)
  15. s = append(s, 10)
  16. s = append(s, 10)
  17. s[1] = 1000
  18. fmt.Println("after a:", a)
  19. fmt.Println(s)
  20. fmt.Printf("s=%p a[1]=%p\n", s, &a[1])
  21. }
  22. func main() {
  23. testSlice()
  24. }
  25. /*
  26. before cap len[4] cap[4]
  27. [2 100 4 5] 2
  28. s=0xc04200a2d8 a[1]=0xc04200a2d8
  29. before cap a: [1 2 100 4 5]
  30. after len[6] cap[8]
  31. after a: [1 2 100 4 5]
  32. [2 1000 4 5 10 10 10 10 10]
  33. s=0xc04206e000 a[1]=0xc04200a2d8
  34. */

For range 遍历切片

  1. for index, val := range slice {}

切片拷贝

  1. package main
  2. import "fmt"
  3. func main() {
  4. s1 := []int{1,2,3,4,5}
  5. s2 := make([]int, 10)
  6. copy(s2, s1)
  7. fmt.Println(s2)
  8. s3 := make([]int,1)
  9. copy(s3,s1)
  10. fmt.Println(s3)
  11. }

string与slice

string是不可变的

string底层就是一个byte的数组,因此,也可以进行切片操作

  1. package main
  2. import "fmt"
  3. func main(){
  4. names := [4]string{
  5. "A",
  6. "B",
  7. "C",
  8. "D",
  9. }
  10. fmt.Println(names)
  11. a := names[0:2]
  12. b := names[1:3]
  13. fmt.Println("a=",a,"b=",b)
  14. b[0]="XXX"
  15. fmt.Println("a=",a,"b=",b)
  16. fmt.Println(names)
  17. //切片对切片进行切片
  18. c := a[1:2]
  19. fmt.Println("c=",c)
  20. c[0]="YYY"
  21. fmt.Println(c[0])
  22. var p [2]*string
  23. p[0]=&names[0]
  24. fmt.Println(p[0])
  25. x :=&names[1]
  26. fmt.Println(x)
  27. *p[0]="AAA"
  28. fmt.Println(p[0])
  29. }

排序和查找操作

sort.Ints对整数进行排序, sort.Strings对字符串进行排序, sort.Float64s对浮点数进行排序.

sort.SearchInts(a []int, b int) 从数组a中查找b,前提是a必须有序

sort.SearchFloats(a []float64, b float64) 从数组a中查找b,前提是a必须有序

sort.SearchStrings(a []string, b string) 从数组a中查找b,前提是a必须有序

  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. )
  6. func intS() {
  7. var a = [...]int{1, 8, 3, 2, 12338, 12}
  8. sort.Ints(a[:])
  9. fmt.Println(a)
  10. }
  11. func stringS() {
  12. var a = [...]string{"abc", "B", "b", "A", "eeee"}
  13. sort.Strings(a[:])
  14. fmt.Println(a)
  15. }
  16. func floatS() {
  17. var a = [...]float64{2.3, 0.8, 28.2, 392342.2, 0.6}
  18. sort.Float64s(a[:])
  19. fmt.Println(a)
  20. }
  21. func intSearch() {
  22. var a = [...]int{1, 8, 38, 2, 348, 484}
  23. sort.Ints(a[:])
  24. index := sort.SearchInts(a[:], 348)
  25. fmt.Println(index)
  26. }
  27. func main() {
  28. intS()
  29. stringS()
  30. floatS()
  31. intSearch()
  32. }

map

map是一堆键值对的未排序集合。

key-value的数据结构,又叫字典或关联数组。

变量声明

map的声明基本上没有多余的元素,比如:var myMap map[string] PersonInfo

其中, myMap是声明的map变量名, string是键的类型, PersonInfo则是其中所存放的值类型。

声明是不会分配内存的,初始化需要make

  1. package main
  2. import "fmt"
  3. func main(){
  4. ages := make(map[string]int)
  5. ages["greg"]=18
  6. ages["ningxin"]=25
  7. fmt.Println(ages)
  8. //or
  9. ages1 := map[string]int{
  10. "greg":18,
  11. "ningxin":25,
  12. }
  13. fmt.Println(ages1)
  14. var m1 map[string]int
  15. fmt.Println(m1 == nil)
  16. m1=make(map[string]int)
  17. fmt.Println(m1 == nil)
  18. }

map相关操作

  1. package main
  2. import "fmt"
  3. func main(){
  4. ages :=map[string]int{
  5. "greg":18,
  6. "ningxin":25,
  7. }
  8. //插入和更新
  9. fmt.Println(ages["greg"])
  10. ages["greg"]=ages["ningxin"]+2
  11. fmt.Println(ages["greg"])
  12. //查找
  13. g,gr := ages["greg"]
  14. fmt.Println(g,gr)
  15. c,ok := ages["c"]
  16. if ok {
  17. fmt.Println(c)
  18. }else{
  19. fmt.Println("not found")
  20. }
  21. if c,ok :=ages["c"];ok {
  22. fmt.Println(c)
  23. }
  24. //遍历
  25. for name,age := range ages {
  26. fmt.Printf("name:%v age:%v\n",name,age)
  27. }
  28. for name := range ages {
  29. fmt.Println(name)
  30. }
  31. //删除
  32. delete(ages,"greg")
  33. fmt.Println(ages["greg"])
  34. }

map排序

a. 先获取所有key,把key进行排序

b. 按照排序好的key,进行遍历

Map反转

初始化另外一个map,把key、value互换即可

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func trans() {
  6. var a map[string]int
  7. var b map[int]string
  8. a = make(map[string]int, 5)
  9. b = make(map[int]string, 5)
  10. a["abc"] = 101
  11. a["efg"] = 10
  12. for k, v := range a {
  13. b[v] = k
  14. }
  15. fmt.Println(b)
  16. }
  17. func main() {
  18. trans()
  19. }

GO开发[二]:golang语言基础的更多相关文章

  1. iOS开发环境C语言基础

    1 在“桌面”上创建一个文件夹Test 1.1 问题 在桌面上创建一个文件夹,我们需要了解Max OS X操作系统的操作方法.对于Max OS X操作系统,有两种方法可以在桌面上创建文件夹,一种方法是 ...

  2. golang语言基础(一)

    0.项目的组织结构: GOPATH路径下是src文件夹---->src文件夹下是项目名称---->项目名称下是该项目的各个包名---->各包名下是.go文件(一个包下,无论有多少个. ...

  3. iOS开发环境C语言基础 数组 函数

    1 求数组元素的最大值 1.1 问题 创建程序,实现查询数组中最大值的功能,需求为:创建一个长度为10的数组,数组内放置10个0~99之间(包含0,包含99)的随机数作为数组内容,要求查询出数组中的最 ...

  4. iOS开发环境C语言基础 变量 、 数据类型和变量赋值 、 其他 、 运算符

    1 变量使用常用错误汇总 1.1 问题 在我们使用变量的过程中,会遇到一些问题,在此将这些问题进行汇总,在今后使用的过程中,不出错.即使出现错误也可以很快地找到问题所在. 1.2 方案 变量在使用的过 ...

  5. Python学习(二)语言基础

    一.变量与类型 在程序设计中,变量是一种存储数据的载体 整型:Python中可以处理任意大小的整数 浮点型:浮点数也就是小数 字符串型:字符串是以单引号或双引号括起来的任意文本 布尔型:布尔值只有Tr ...

  6. iOS开发环境C语言基础 运算符和表达式

    1 年龄判断程序 1.1 问题 本案例需要使用交互的方式判断年龄的范围:用户从控制台输入一个年龄,由程序判断该年龄是否在18~50岁之间.程序交互过程如图-1所示: 图-1 1.2 步骤 实现此案例需 ...

  7. Cocos2d-x手机游戏开发必备C++语言基础

    http://edu.51cto.com/course/course_id-1380-page-1.html

  8. go语言基础之开发工具

    一.安装go 1.在linux环境下安装go yum install go -y 2.go下载地址 https://golang.org/dl/ 3.windows安装版本 go1.9.2.windo ...

  9. Golang 汇编asm语言基础学习

    Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...

随机推荐

  1. hdu 1885 Key Task(bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1885 再贴一个链接http://blog.csdn.net/u013081425/article/details ...

  2. Android仿微信朋友圈图片浏览器(支持图片手势缩放,拖动)

    ※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ...

  3. BMC手册 — 第一模块 BMC介绍

    BMC的监控 其实是BPPM与 Patrol 产品的结合.早期它们二个是单独监控产品,后来BPPM被BMC收购.拿来与patrol产口集成产品整合后,BPPM主要用来做展示与告警处理,底层采集采用pa ...

  4. maven安装配置及使用maven创建一个web项目

    今天开始学习使用maven,现在把学习过程中的资料整理在这边. 第一部分.maven安装和配置. http://jingyan.baidu.com/article/295430f136e8e00c7e ...

  5. mybatis关联

    title: mybatis关联 date: 2017-12-18 18:00:30 tags: - [mybatis] categories: - [编程] - [开发工具] permalink: ...

  6. javascript中的异步 macrotask 和 microtask 简介

    javascript中的异步 macrotask 和 microtask 简介 什么是macrotask?什么是microtask?在理解什么是macrotask?什么是microtask之前,我们先 ...

  7. Intellij IDEA设置运行时Java参数

    1.选中类,点击顶部菜单:Run-->Edit Configuration,如下所示: 2.选择Application,指定的类,在右边选择Configuration,并在VM options中 ...

  8. MongoDB的CURD命令

    1.启动客户端 在MongDB服务成功启动的情况下,打开cmd,在MongDB的bin文件目录下执行MongDB命令 可以看到MongDB版本号3.0.7与默认连接的数据库test.test数据库是系 ...

  9. 《程序设计方法》【PDF】下载

    内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...

  10. 引号在jsp页面中正确显示的处理

    写在前面: 在前面的博客中已经有了对一些特殊字符的处理,但是万万没有想到,出来了一个含有引号的字符串,比如这样的ab"c"d的一个字符串.如果在超链接传值的时候,会与前面的引号成对 ...