当前位置 知且行 其他 正文 下一篇:

Go语言实战笔记2

继上篇 Go语言实战笔记1

接触一门新语言,了解其语法结构,常用的包是必须的,同时也是无聊的。有过其他编程语言基础的同学,学习go的语法很简单,参照 go文档 过一遍就能对go的语法有大致的了解。通过 go包文档 查阅常用包的使用

这些知识都是相当枯燥的,只需要大概过一遍,在实际写代码时,再参照文档演练,写多了也就熟悉了。

string字符串处理

string包文档

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func main() {
  7. fmt.Println(strings.TrimSpace(" 云想衣裳花想容 ")) // 云想衣裳花想容
  8. fmt.Println(strings.Trim("云想衣裳花想容", "花想容")) // 云想衣裳
  9. fmt.Println(strings.TrimLeft("黄山落叶松叶落山黄", "黄")) // 山落叶松叶落山黄
  10. fmt.Println(strings.TrimRight("黄山落叶松叶落山黄", "黄")) // 黄山落叶松叶落山
  11. s := []string{"抽刀", "断水", "水更流"}
  12. fmt.Println(strings.Join(s, "")) // 抽刀断水水更流
  13. url := "https://github.com/"
  14. fmt.Println(strings.HasPrefix(url, "https")) // true
  15. }

strings

time时间处理

time文档

go是一门很自恋的语言,时间的格式化必须以”2006/01/02 15:04:05”为时间点,据说这是go的诞生时间,在这点上,与董小姐要求手机开机画面是她的头像有异曲同工之妙。

  1. package main
  2. import (
  3. "time"
  4. "fmt"
  5. )
  6. func main() {
  7. now := time.Now()
  8. fmt.Println(now.Format("2006/01/02 15:04:05")) // 2018/07/26 09:29:46
  9. fmt.Println(now.Format("2006-01-02 15:04:05")) // 2018-07-26 09:29:46
  10. fmt.Println(now.Format("2018-01-02 15:04:05")) // 26078-07-26 09:30:31 改成其它时间点,返回的是什么鬼...
  11. }

指针

  1. package main
  2. import "fmt"
  3. func main() {
  4. var a = 10
  5. var p *int // 定义一个指针变量用于存储内存地址
  6. p = &a
  7. fmt.Println("a的值:", a) // a的值: 10
  8. fmt.Println("a的内存地址:", &a) // a的内存地址: 0xc4200140d8
  9. fmt.Println("p的值:", p) // p的值: 0xc4200140d8
  10. fmt.Println("p的内存地址:", &p) // p的内存地址: 0xc42000c028
  11. fmt.Println("p指向的值:", *p) // p指向的值: 10
  12. *p = 20 // 修改 p 指向的值,会把a的值也修改了
  13. fmt.Println(a) // 20
  14. var b = 100
  15. p = &b // 给p重新赋值
  16. *p = 200
  17. fmt.Println(a) // 20 不会改变a的值
  18. fmt.Println(b) // 200
  19. }

指针参考文档

strconv 类型转换

strconv文档

  1. package main
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. func main() {
  7. var str string
  8. fmt.Scanf("%s", &str)
  9. number, err := strconv.Atoi(str) // 将string转为number
  10. if err != nil {
  11. fmt.Println("转换失败,错误信息:", err)
  12. return
  13. }
  14. fmt.Println(number)
  15. }
  1. demo [master] go run main/main.go
  2. 10
  3. 10
  4. demo [master] go run main/main.go
  5. 测试
  6. 转换失败,错误信息: strconv.Atoi: parsing "测试": invalid syntax

rand 随机数

从0至100之间取一个随机数,然后猜这个数是多少

  1. package main
  2. import (
  3. "math/rand"
  4. "fmt"
  5. )
  6. func main() {
  7. var n int
  8. n = rand.Intn(100)
  9. for {
  10. var input int
  11. fmt.Scanf("%d\n", &input)
  12. flag := false
  13. switch {
  14. case input == n:
  15. fmt.Println("猜对了")
  16. flag = true
  17. case input > n:
  18. fmt.Println("大了")
  19. case input < n:
  20. fmt.Println("小了")
  21. }
  22. if flag {
  23. break
  24. }
  25. }
  26. }
  1. demo [master] go run main/main.go
  2. 50
  3. 小了
  4. 75
  5. 小了
  6. 92
  7. 大了

函数

参考文档

函数可以被储存到变量中

  1. package main
  2. import "fmt"
  3. func add(a, b int) int {
  4. return a + b
  5. }
  6. func main() {
  7. plus := add // 将函数赋予到变量中
  8. sum := plus(100, 200)
  9. fmt.Println(sum) // 300
  10. }

几个实例

以下是几个简单的实例,主要是为了熟悉go的相关语法规范

实例1. 获取任意两个数字之间的所有质数

思路:

  • 任意两个数字,即我们要从终端输入获取数字,fmt.Scanf能获取终端的标准输入

  • 质数判断:除了1和自身,不能再被其他数字整除。将判断的方法封装成独立函数

  1. package main
  2. import "fmt"
  3. // 判断是否为质数
  4. func isPrime(n int) bool {
  5. for i := 2; i < n; i++ {
  6. if n % i == 0 {
  7. return false
  8. }
  9. }
  10. return true
  11. }
  12. func main() {
  13. var (
  14. n int
  15. m int
  16. )
  17. fmt.Scanf("%d%d", &n, &m) // 获取终端输入的数字
  18. for i := n; i < m; i++ {
  19. if isPrime(i) == true {
  20. fmt.Printf("%d\n", i)
  21. continue
  22. }
  23. }
  24. }

实例2. 求任意一个数的阶乘

  1. package main
  2. import "fmt"
  3. func sum(n int) int {
  4. var s = 1
  5. for i := 1; i <= n; i++ {
  6. s = s * i
  7. }
  8. return s
  9. }
  10. func main() {
  11. var n int
  12. fmt.Scanf("%d", &n)
  13. s := sum(n)
  14. fmt.Println(s)
  15. }

代码中阶乘的结果数据类型是int,如果结果超出int的最大值,会显示意料之外的结果

  1. demo [master] go run main/main.go
  2. 5
  3. 120
  4. demo [master] go run main/main.go
  5. 100
  6. 0

实例3

输出以下效果

效果图

  1. package main
  2. import "fmt"
  3. func printString(n int) {
  4. for i := 1; i < n+1; i++ {
  5. for j := 0; j < i; j++ {
  6. fmt.Printf("A")
  7. }
  8. fmt.Println()
  9. }
  10. }
  11. func main() {
  12. printString(9)
  13. }
转载必须注明出处:https://www.zhiqiexing.com/45.html

关于我

我希望能成为一个认真、有趣、创造更多价值的人
关注微信
微信扫一扫关注我

微信扫一扫关注我

返回顶部