2018年Go语言实战笔记2

继上篇 2018年Go语言实战笔记1

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

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

string字符串处理

string包文档

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.TrimSpace(" 云想衣裳花想容 ")) // 云想衣裳花想容
    fmt.Println(strings.Trim("云想衣裳花想容", "花想容")) // 云想衣裳
    fmt.Println(strings.TrimLeft("黄山落叶松叶落山黄", "黄")) // 山落叶松叶落山黄
    fmt.Println(strings.TrimRight("黄山落叶松叶落山黄", "黄")) // 黄山落叶松叶落山
    s := []string{"抽刀", "断水", "水更流"}
    fmt.Println(strings.Join(s, "")) // 抽刀断水水更流
    url := "https://github.com/"
    fmt.Println(strings.HasPrefix(url, "https")) // true
}
strings

time时间处理

time文档

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

package main

import (
    "time"
    "fmt"
)

func main() {
    now := time.Now()
    fmt.Println(now.Format("2006/01/02 15:04:05")) // 2018/07/26 09:29:46
    fmt.Println(now.Format("2006-01-02 15:04:05")) // 2018-07-26 09:29:46
    fmt.Println(now.Format("2018-01-02 15:04:05")) // 26078-07-26 09:30:31 改成其它时间点,返回的是什么鬼...
}

指针

package main

import "fmt"

func main() {
    var a = 10

    var p *int // 定义一个指针变量用于存储内存地址
    p = &a

    fmt.Println("a的值:", a) // a的值: 10
    fmt.Println("a的内存地址:", &a) // a的内存地址: 0xc4200140d8
    fmt.Println("p的值:", p) // p的值: 0xc4200140d8
    fmt.Println("p的内存地址:", &p) // p的内存地址: 0xc42000c028
    fmt.Println("p指向的值:", *p) // p指向的值: 10

    *p = 20 // 修改 p 指向的值,会把a的值也修改了
    fmt.Println(a) // 20

    var b = 100
    p = &b // 给p重新赋值
    *p = 200
    fmt.Println(a) // 20 不会改变a的值
    fmt.Println(b) // 200
}

指针参考文档

strconv 类型转换

strconv文档

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var str string
    fmt.Scanf("%s", &str)
    number, err := strconv.Atoi(str) // 将string转为number
    if err != nil {
        fmt.Println("转换失败,错误信息:", err)
        return
    }

    fmt.Println(number)
}
☁  demo [master] ⚡ go run main/main.go
10
10
☁  demo [master] ⚡ go run main/main.go
测试
转换失败,错误信息: strconv.Atoi: parsing "测试": invalid syntax

rand 随机数

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

package main

import (
    "math/rand"
    "fmt"
)

func main() {
    var n int
    n = rand.Intn(100)

    for {
        var input int
        fmt.Scanf("%d\n", &input)
        flag := false
        switch {
        case input == n:
            fmt.Println("猜对了")
            flag = true
        case input > n:
            fmt.Println("大了")
        case input < n:
            fmt.Println("小了")
        }

        if flag {
            break
        }
    }
}
☁  demo [master] ⚡ go run main/main.go
50
小了
75
小了
92
大了

函数

参考文档

函数可以被储存到变量中

package main

import "fmt"

func add(a, b int) int {
    return a + b
}

func main() {
    plus := add // 将函数赋予到变量中
    sum := plus(100, 200)
    fmt.Println(sum) // 300
}

几个实例

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

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

思路:

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

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

package main

import "fmt"

// 判断是否为质数
func isPrime(n int) bool {
    for i := 2; i < n; i++ {
        if n % i == 0 {
            return false
        }
    }
    return true
}

func main() {
    var (
        n int
        m int
    )

    fmt.Scanf("%d%d", &n, &m) // 获取终端输入的数字
    for i := n; i < m; i++ {
        if isPrime(i) == true {
            fmt.Printf("%d\n", i)
            continue
        }
    }
}

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

package main

import "fmt"

func sum(n int) int {
    var s = 1
    for i := 1; i <= n; i++ {
        s = s * i
    }
    return s
}

func main() {
    var n int
    fmt.Scanf("%d", &n)
    s := sum(n)
    fmt.Println(s)
}

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

☁  demo [master] ⚡ go run main/main.go
5
120
☁  demo [master] ⚡ go run main/main.go
100
0

实例3

输出以下效果

效果图
package main

import "fmt"

func printString(n int) {
    for i := 1; i < n+1; i++ {
        for j := 0; j < i; j++ {
            fmt.Printf("A")
        }
        fmt.Println()
    }
}

func main() {
    printString(9)
}

如果觉得本文对你有所帮助,点个赞,或者赏杯咖啡钱,你的认可对我很重要

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容