Go基础(1)

demo1:

package add

var Name string = "hello world"
var Age int = 10
package main

import (
    "DEMO/test/day2/example2/add"
    "fmt"
)

func main() {

    fmt.Println("Name:", add.Name)
    fmt.Println("Age:", add.Age)

}

分析:

1.调包,需要写GOPATH目录下src目录之后的路径

  比如我电脑的GOPATH:D:PROJECTGO_PROJECT

  我的add包目录:D:PROJECTGO_PROJECTsrcDEMO estday2example2add

2.一个文件夹里面只能有一个包,最好同名

3.main函数必须在main包中

4.private变量小写首字母,public变量大写首字母即可

demo2:

package add

var Name string = "test"
var Age int = 666

func init() {
    Name = "Hello World!"
    Age = 10
}
package main

import (
    a "DEMO/test/day2/example3/add"
    "fmt"
)

func main() {

    fmt.Println("Name:", a.Name)
    fmt.Println("Age:", a.Age)

}

分析:

1.导入的包可以取别名,比如我这里的a

2.init函数在初始赋值后执行,所以这里应该输出的是helloworld和10

demo3:

package main

import (
    "fmt"
)

func modify(a int) {
    a = 10
    return
}

func modity(a *int) {
    *a = 10
    return
}

func main() {
    a := 5
    b := make(chan int, 1)
    fmt.Println("a =", a)
    fmt.Println("b =", b)
    modify(a)
    fmt.Println("a =", a)
    modity(&a)
    fmt.Println("a =", a)
}

分析:

1.依次输出:a = 5,b = 0xc0000160e0,a = 5,a = 10

2.理解修改地址和修改引用的区别

demo4:

package main

import "fmt"

func swap(a *int, b *int) {
    temp := *a
    *a = *b
    *b = temp
    return
}

func go_swap(a int, b int) (int, int) {
    return b, a
}

func main() {
    three := 3
    four := 4
    swap(&three, &four)
    fmt.Println("---Swap---")
    fmt.Println("three =", three)
    fmt.Println("four =", four)
    three, four = go_swap(three, four)
    fmt.Println("---Swap---")
    fmt.Println("three =", three)
    fmt.Println("four =", four)
}

分析:

1.两种交换都是正确的

2.理解传统c语言交换函数以及多返回值形式的交换函数

demo5:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func init() {
    rand.Seed(time.Now().UnixNano())
}

func main() {
    fmt.Println("---Generate Random Number---")
    fmt.Println("--Int---")
    for i := 0; i < 3; i++ {
        a := rand.Int()
        fmt.Println(a)
    }
    fmt.Println("---Int(100)---")
    for i := 0; i < 3; i++ {
        a := rand.Intn(100)
        fmt.Println(a)
    }
    fmt.Println("---Float32---")
    for i := 0; i < 3; i++ {
        a := rand.Float32()
        fmt.Println(a)
    }
}

分析:

1.简单的随机数生产程序,学会rand和time的基本使用

2.根据当前的精确时间给rand一个种子,保证随机的不确定性

demo6:

package main

import "fmt"

func reverse1(str string) string {
    var result string
    strLen := len(str)
    for i := 0; i < strLen; i++ {
        result += fmt.Sprintf("%c", str[strLen-i-1])
    }
    return result
}

func reverse2(str string) string {
    var result []byte
    tmp := []byte(str)
    lenth := len(str)
    for i := 0; i < lenth; i++ {
        result = append(result, tmp[lenth-i-1])
    }
    return string(result)
}

func main() {
    str := "hello world!"
    result := reverse2(str)
    fmt.Printf("str:%s
result:%s
", str, result)
}

分析:

1.反转字符串的两种形式

demo7:

package main

import (
    "fmt"
    "math"
)

func main() {
    min := 1
    max := 100
    for i := min; i <= max; i++ {
        var flag bool = true
        if i == 1 {
            flag = false
        }
        for j := 2; j <= int(math.Sqrt(float64(i))); j++ {
            if i%j == 0 {
                flag = false
                break
            }
        }
        if flag {
            fmt.Printf("%d是素数
", i)
        }
    }
}

分析:

1.求1-100的所有质数

2.注意求指数过程优化,除数最大达到根号被除数即可

demo8:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    min := 1
    max := 1000
    for i := min; i <= max; i++ {
        if isNarcissisticNumber(i) {
            fmt.Printf("%d是水仙花数
", i)
        }
    }
}

func isNarcissisticNumber(n int) bool {
    tmp := strconv.Itoa(n)
    data := []byte(tmp)
    lenth := len(data)
    var result int = 0
    for i := 0; i < lenth; i++ {
        number, _ := strconv.Atoi(string(data[i]))
        result += number * number * number
    }
    if n == result {
        return true
    } else {
        return false
    }
}

分析:

1.求水仙花数的一种实现

2.这里的Atoi是多返回值函数,用不到的返回值用“_”代替即可

3.这里是字符串处理的方式实现,还可以用除10的数学方式实现

demo9:

package main

import "fmt"

func main() {
    fmt.Println(factorial(5))
}

func factorial(n uint) uint {
    if n == 0 {
        return 1
    }
    if n == 1 {
        return n
    }
    return n * factorial(n-1)
}

分析:

1.利用递归实现阶乘,是比较优秀的实现方式

原文地址:https://www.cnblogs.com/xuyiqing/p/10592764.html