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
    }
  • 相关阅读:
    【SAS NOTE】OUTPUT
    【SAS NOTES】_NULL_
    【SAS NOTE】sas 9.2 安装
    【SAS NOTE】FREQ
    纯数学教程 Page 203 例XLI (1)
    纯数学教程 Page 203 例XLI (3)
    纯数学教程 Page 203 例XLI (2)
    Prove Cauchy's inequality by induction
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
    纯数学教程 Page 325 例LXVIII (15) 调和级数发散
  • 原文地址:https://www.cnblogs.com/hacknoone/p/13440887.html
Copyright © 2011-2022 走看看