zoukankan      html  css  js  c++  java
  • Go学习第一章基础语法

    1.1变量的定义和赋值

    package main
     
    import(
        "fmt"
    )
     
    //集中定义变量
    var (
        aa = 2
        bb = true
        cc = "jack"
    )
    
    func variableZeroValue(){
        //定义变量不赋值会有一个默认的初始值
        var a int
        var s string
        fmt.Printf("%d %q
    ",a,s)   //格式化输出
    }
    
    func variableShorter(){
        //用冒号
        d,e,f := 5,false,"zhang"
        fmt.Println(d,e,f) //定义的变量不使用会报错
    }
     
    func main() {
        fmt.Println("helloworld")
        variableZeroValue()        //a,s初始值:0 ""
    }

    三种方法定义 var定义名后面加类型:var a int=1,让编译器自动选择类型:var a,b=1,"aa",使用冒号定义:a,b := 1,"aa"。

    1.2数据类型以及枚举和常量

    数字类型:(u)int8,int32,int64,float32,float64,complex64,complex128.....

    字符串:byte,rune,uintptr(用于存放指针)

    常量的定义:

    package main
     
    import(
        "fmt"
    )
     
    func main() {
        //不指定类型,则可以作为各种类型使用
        const a,b = 3,4
        //指定为string类型,则为指定的类型
        const str string  = "derek"
        const (  
            java = iota    //iota自增值枚举类型
            python
            golang
            javascript
        )
        fmt.Println(java,python,golang,javascript) //0 1 2 3
        fmt.Println(a,b,str)     //3 4 derek
    }

    1.3条件语句

    if不需要加括号且里可以赋值:

    package main
     
    import(
        "fmt"
        "io/ioutil"
    )
     
    func main() {
        const filename = "C:\Users\86158\Desktop\awesomeProject\src\abc.txt"
        //ioutil.ReadFile:返回两个值,一是读出内容,二是error信息
        //if的条件里可以赋值
        if contents,err := ioutil.ReadFile(filename); err != nil{
            fmt.Println(err)
        }else {
            fmt.Printf("%s
    ",contents)
        }
        //if条件里赋值变量的作用域就在if语句里,外面访问报错
    }

    switch不需要break自动跳出,语句后可以没有表达式:

    package main
     
    import(
        "fmt"
    )
    //string是返回值类型 
    func grade(score int) string{
        g := ""
        switch {
        case score < 0 || score > 100:
            //报错信息
            panic(fmt.Sprintf("错误的分数:%d",score))
        case score < 60:
            g = "D"
        case score < 80:
            g = "C"
        case score < 90:
            g = "B"
        case score <= 100:
            g = "A"
        }
        return g
    }
     
    func main() {
        fmt.Println(grade(2))
        fmt.Println(grade(101))     //panic: 错误的分数:101
    }

    for语句条件里不需要括号,可省略初始条件,结束条件,递增表达式:

    package main
     
    import "fmt"
     
    func main() {
        sum := 0
        for i :=1; i <= 100; i++{
            sum += i
        }
        for { //不写条件就是死循环,没有while
            fmt.Println(sum)  
        }      
        fmt.Println(sum)
    }

    1.4函数

    函数返回值写在最后并且可以有多个,函数也可以作为参数:

    package main
     
    import "fmt"
     
    //返回两个值
    func div(a,b int) (q,r int){
        return a / b, a % b
    }
     
    func main() {
        q,r := div(13,3)
        //如果只想接收一个返回值,可以用“_”
        q,_ := div(13,3)
        fmt.Println(q,r)       //4 1
    }

     1.5指针

    指针也是一个变量,它存储的数据是另一个变量的内存地址,自身也有一个内存地址。

    值传递是将实际参数复制一份到函数中,引用传递(slice,map,channel,inrerface,fun())是将实际参数的地址传递到函数中,c++例子:

    #include <stdio.h>
    
    void pa_by_val(int a){
        a++;
    }
    
    void pa_by_ref(int& a){
        a++;
    }
    
    int main(){
        int a = 3;
        pa_by_val(a);
        printf("After pa_by_val: %d
    ", a); // 值传递 3
        
        pa_by_ref(a);
        printf("After pa_by_ref: %d
    ", a); // 引用传递 4
    }

    引用传递指针参数传递到函数内,引用传递例子:

    package main
    
    import "fmt"
    
    func main() {
       a, b := 100, 200
       /* 调用 swap()
       * &a指向a指针,a变量地址
       * &b指向b指针,b变量地址
       */
       swap(&a, &b)
       fmt.Println(a,b) /* 200 100 */ 
    }
    
    func swap(x , y *int) {
       *x,*y = *y,*x      
    }

    指针操作&:取地址,*:根据地址取值,用法:

    package main
     
    import "fmt"
     
    func main() {
        var a int = 2
        var pa *int = &a
        *pa = 3
        fmt.Println(a)     //3
    }
  • 相关阅读:
    关于医学的一点想法
    我的ArcGis9.3 到Arcgis10.0 升级步骤
    最近一月的娱乐生活:看电影,玩游戏
    最近一月的娱乐生活:看电影,玩游戏
    5年技术学习历程的回顾
    5年技术学习历程的回顾
    网站开发的技术选型问题
    网站开发的技术选型问题
    学技术真累
    Java实现 LeetCode 200 岛屿数量
  • 原文地址:https://www.cnblogs.com/hacknoone/p/13440887.html
Copyright © 2011-2022 走看看