GO学习笔记05

一、指针(重点)

1.获取命令行参数

    package main
    
    import (
        "os"
        "fmt"
    )
    
    func main() {
        list := os.Args
        n := len(list)
        fmt.Println("n = ", n)
    
        for i := 0; i < n; i++ {
            fmt.Printf("list[%d] = %s\n", i, list)
        }
    
        for i, data := range list {
            fmt.Printf("list[%d] = %s\n", i, data)
        }
    
        args := os.Args
        if args == nil || len(args) < 2 {
            fmt.Println("err: xxx ip port")
            return
        }
    
        ip := args[1]
        port := args[2]
        fmt.Printf("ip = %s, port = %s\n", ip, port)
    }

2.导包

    package main
    
    /*
    import "fmt"
    import _ "os"   //忽略此包
    */
    
    /*
    import (
        "fmt"
        _ "os"
    )
    */
    
    import . "fmt" //   .导包的形式可以直接使用方法名字
    
    func main() {
        Println("--------")
    }

3.init函数

 import (
        _"fmt"
    )
_操作其实是引入该包,而不是直接使用包里面的函数,而是调用了包里面的init函数

4.指针

 package main
    
    import "fmt"
    
    func main() {
        var a int = 10
        fmt.Printf("a = %d\n", a)
        fmt.Printf("&a = %p\n", &a) //取地址a,就是a的指针
    }
    
    
    a = 10
    &a = 0xc42001a070



    package main
    
    import "fmt"
    
    func main() {
        var a int = 10
        fmt.Printf("a = %d\n", a)
        fmt.Printf("&a = %p\n", &a) //取地址a,就是a的指针
    
        var p *int
        p = &a //指针变量指向谁,就把谁的地址赋值给指针变量
        fmt.Printf("p = %v, &a = %v\n", p, &a)
    
        *p = 666 //操作的是p所指向的内存
        fmt.Printf("*p = %v, a = %v\n", *p, a)
    
    }
    
    
    a = 10
    &a = 0xc42001a070
    p = 0xc42001a070, &a = 0xc42001a070
    *p = 666, a = 666
  • 指针的默认值是nil,没有NULL常量
  • 操作符“&”取变量地址,“*”通过指针访问目标对象
  • 不支持指针运算,不支持“->”运算符,直接用“.”访问目标成员

如果想用指针但是不赋值的情况下只能用下面的方法

    package main
    
    import "fmt"
    
    func main() {
        var p1 *int
        p1 = new(int)
        fmt.Println("*p1 =", *p1)
    
        p2 := new(int)
        *p2 = 111
        fmt.Println("*p2 =", *p2)
    }
    
    *p1 = 0
    *p2 = 111

只需要用new()函数,无需担心内存的生命周期或怎么样将其删除,因为go的内存管理系统会帮助我们打理一切。

内存操作问题

  • 值传递
    package main
    
    import "fmt"
    
    func main() {
        a, b := 10, 20
        swap(a, b)      //值传递
        fmt.Printf("main: a = %d, b = %d\n", a, b)
    }
    //swap函数操作的并非是和main里面的a b同一块内存空间,只是把a和b的值给了函数的实参
    func swap(i int, j int) {
        i, j = j, i
        fmt.Printf("swap: i = %d, j = %d\n", i, j)
    }
    
    swap: i = 20, j = 10
    main: a = 10, b = 20
    
  • 地址传递
 package main
    
    import "fmt"
    
    func main() {
        a, b := 10, 20
        swap(&a, &b)        //地址传递
        fmt.Printf("main: a = %d, b = %d\n", a, b)
    }
    func swap(i *int, j *int) {
        *i, *j = *j, *i
        fmt.Printf("swap: *i = %d, *j = %d\n", *i, *j)
    }
    
    swap: *i = 20, *j = 10
    main: a = 20, b = 10

二、数组

1.定义

    package main
    
    import "fmt"
    
    func main() {
        var a [5]int = [5]int{1, 2, 3, 4, 5}
        fmt.Println("a = ", a)
    
        b := [5]int{1, 2, 3, 4, 5}
        fmt.Println("b = ", b)
    
        //部分初始化
        c := [5]int{1, 2}
        fmt.Println("c = ", c)
    
        //指定每个元素的初始化
        d := [5]int{2: 10, 4: 29}
        fmt.Println("d = ", d)
    
    }
    
    
    a =  [1 2 3 4 5]
    b =  [1 2 3 4 5]
    c =  [1 2 0 0 0]
    d =  [0 0 10 0 29]

2.迭代

 package main
    
    import "fmt"
    
    func main() {
        var a [5]int = [5]int{1, 2, 3, 4, 5}
    
        for i := 0; i < len(a); i++ {
            fmt.Printf("a[%d] =%d\n", i, a[i])
        }
        fmt.Printf("-----------\n")
        
        for j, data := range a {
            fmt.Printf("a[%d] =%d\n", j, data)
        }
    
    }
    
    
    a[0] =1
    a[1] =2
    a[2] =3
    a[3] =4
    a[4] =5
    -----------
    a[0] =1
    a[1] =2
    a[2] =3
    a[3] =4
    a[4] =5

3.比较和赋值

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

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,505评论 1 51
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • 这是写给老宽的小伙伴们的一个鸡蛋的暴走的准备指南,老宽一不小心考取过国家健身教练证,今天觉得这种准备指南可以帮助到...
    开火箭的拖拉机阅读 1,782评论 1 4
  • 美术馆的雕塑 摒弃了传统的材料,新时代、新触动。我们除了身处钢筋混凝土之中,还缠绕在数据、网络之间。于有行无形时禁...
    鱼小飞_阅读 180评论 0 2
  • 今晚的日记记得比较少,只是草草说了句感恩而已。没想到一肚子的话在失眠这等着我呢,真是够了。偏头疼,可能好几天没睡过...
    恩丫头阅读 162评论 0 0