欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go基础(1)

程序员文章站 2022-05-14 09:04:43
基本的概念语法就不写了,直接上代码和分析 demo1: 分析: 1.调包,需要写GOPATH目录下src目录之后的路径 比如我电脑的GOPATH:D:\PROJECT\GO_PROJECT 我的add包目录:D:\PROJECT\GO_PROJECT\src\DEMO\test\day2\examp ......

基本的概念语法就不写了,直接上代码和分析

 

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:\project\go_project

  我的add包目录:d:\project\go_project\src\demo\test\day2\example2\add

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\nresult:%s\n", 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是素数\n", 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是水仙花数\n", 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.利用递归实现阶乘,是比较优秀的实现方式