go学习笔记-1

栏目: Go · 发布时间: 6年前

内容简介:本文来自:Segmentfault感谢作者:梦缘查看原文:go学习笔记-1
  1. 变量的定义

    • 只定义,不赋值
    //会有初值
    var a int
    var s string
    • 定义和赋值
    var a int = 3
    var s string = "abs"
    #一次定义多个同类型的变量
    var a, b int = 3, 4
    • 系统判别类型
    var a, b, c, s = 2, 3, 4, "def"
    • 短格式
    c := 5
    a, b, s, d := 2, 3, "def", 5
    d = 6
    • 在函数外部集中定义
    //在函数外部不能使用短格式定义
    var (
        a = 3
        b = 4
        s = "hell"
    )
  2. 内建变量的类型

    • 分类
    bool,string
    (u)int,(u)int8|16|32|64,uintptr(指针)
    byte,rune(字符)
    float32|64,complex64|128(复数)
    • 强类型
    //打印变量的类型
    func main() {
        var a int = 89
        b := 95
        fmt.Println("value of a is", a, "and b is", b)
        fmt.Printf("type of a is %T, size of a is %d", a, unsafe.Sizeof(a)) // a 的类型和大小
        fmt.Printf("\ntype of b is %T, size of b is %d", b, unsafe.Sizeof(b)) // b 的类型和大小
    }
    • 数据类型的转换
    func main() {
        i := 55      //int
        j := 67.8    //float64
        sum := i + int(j) //不同类型的数据不允许进行运算 这里需要强制转换
        var c int
        c = int(j) //赋值也是一样
        fmt.Println(sum, c)
    }
  3. 常量

    • 定义
    func main() {
        const name = "mengyuan" //不指定类型
        #const name string = "mengyuan" //指定类型
        fmt.Printf("type %T value %v\n", name, name)
        const(
            a = 1
            s = "mengyuan"
        ) //一次定义多个类型
    }
    • 注意
    //因为是强类型语言
    //赋值操作需要两边的类型一致 常量如果不指定类型的话就不需要注意
    func main() {
        const trueConst = true //类型不确定
        type myBool bool
        var defaultBool bool = trueConst // 允许 在赋值时确定类型
        var customBool myBool = trueConst // 允许
        //defaultBool = customBool // 不允许
    
        fmt.Println(defaultBool, customBool)
    }
    • 枚举
    func main() {
        const(
            cpp = 0
            java = 1
            python = 2
            golang = 3
            js = 4
        )
        //自增值枚举类型
        const(
            cpp = iota
            java
            python
            golang
            js
        )
    }
  4. if-else

    • 格式
    if condition {
        doing
    } else if condition {
        doing
    } else {
        doing
    }
    • 注意点
    //判断奇偶
    func main() {
        if num := 10; num % 2 == 0 { //可以连写 但是变量num的作用范围仅仅在if语句中
            fmt.Println("the number is even") 
        } else { // }和else必须是在一行 不能换行
            fmt.Println("the number is odd")
        }
    }
  5. switch

    • 连写模式
    //num := 5
    switch num := 2; num { // num 的作用域在switch
    case 1:
        fmt.Println("php")
    case 2:
        fmt.Println("python")
    case 3:
        fmt.Println("java")
    // case 3: case不允许出现重复项
    //    fmt.Println("js")
    case 4:
        fmt.Println("cpp")
    case 5:
        fmt.Println("golang")
    default: // default可以写在任何位置
        fmt.Println("default")
    }
    • 无表达式
    nums := 2
    switch {  //相当于switch true
    case nums <= 2: 
        fmt.Println("E")
    case nums <= 5:
        fmt.Println("D")
    case nums <= 6:
        fmt.Println("C")
    //case 3: case不允许出现重复项
    //    fmt.Println("js")
    case nums <= 8:
        fmt.Println("B")
    case nums <= 10:
        fmt.Println("A")
    default:
        fmt.Println("default")
    }
    • 多表达式(多种情况 一种处理方式)
    // 包含多个表达式
    numbers := 5
    switch numbers {
    case 2, 3, 4, 5:
        fmt.Println("the number <= 5")
    case 6, 7, 8, 9, 10:
        fmt.Println("the number <= 5")
    }
    • fallthrough 语句
    // 使用 fallthrough 语句可以在已经执行完成的 case 之后,把控制权转移到下一个 case 的执行代码中
    number := 5
    switch number {
    case 2:
        fmt.Println("E")
        fallthrough
    case 5:
        fmt.Println("D")
        fallthrough
    case 6:
        fmt.Println("C")
        fallthrough
    //case 3: case不允许出现重复项
    //    fmt.Println("js")
    case 8:
        fmt.Println("B")
        fallthrough
    case 10:
        fmt.Println("A")
    }
  6. 循环

    • 标准示例
    // for循环语句包括 初始条件 终止条件 post语句 三部分
    //num := 10
    for i := 1; i <= 10; i++ {
        fmt.Println(i)
    }
    • continue 终止本次循环
    //num := 10
    for i := 1; i <= 10; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Println(i)
    }
    • break 跳出整个循环
    //num := 10
    for i := 1; i <= 10; i++ {
        if i > 7 {
            break
        }
        fmt.Println(i)
    }
    • 模仿while
    i := 1
    for i <= 10 {
        fmt.Println(i)
        i++
    }
    • 死循环
    for {
        fmt.Println("hello")
    }
  7. 函数

    • 定义
    func calculateBill(num int, price int) int {
        ret := num * price
        return ret
    }
    //同类型的参数可以简写 返回值类型可以不写
    func calculateBill(num,price int) int {
        ret := num * price
        return ret
    }
    • 调用
    func main() {
        price, num := 4, 5//定义变量
        ret := calculateBillSimple(num, price)//调用
        fmt.Println(ret)
        //空白符
        var a, _ = rectPropsName(2, 4)
        fmt.Printf("the area is %.2f \n", a)
    }
    • 多返回值
    //多返回值
    func rectProps(length, width float64) (float64, float64) {
        var area = length * width
        var perimeter = (length + width) * 2
        return area, perimeter
    }
    • 命名返回值
    func rectPropsName(length, width float64) (area float64, perimeter float64) {
        area = length * width
        perimeter = (length + width) * 2
        return
    }
  8. 指针

    • 定义
    // 指针的典型例子
    var a int = 2
    var pa *int = &a
    *pa = 3
    fmt.Println(a)
    • 动态改变变量的值
    func swap(a, b *int) {
        *a, *b = *b, *a
    }
    func swapNew(a, b int) (int, int) {
        a, b = b, a
        return a, b
    }
    
    func main() {
        // 交换变量的值
        a, b := 3, 4
        //swap(&a, &b)
        a, b = swapNew(a, b)
        fmt.Println(a, b)
    }
  9. 搭建一个web服务

    • net/http模块
    // 当然不支持高并发
    package main
    import (
        "net/http"
    )
    func main() {
        http.Handle("/", http.FileServer(http.Dir(".")))
        http.ListenAndServe(":8080", nil)
    }

本文来自:Segmentfault

感谢作者:梦缘

查看原文:go学习笔记-1


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入分析Java Web技术内幕(修订版)

深入分析Java Web技术内幕(修订版)

许令波 / 电子工业出版社 / 2014-8-1 / CNY 79.00

《深入分析Java Web技术内幕(修订版)》新增了淘宝在无线端的应用实践,包括:CDN 动态加速、多终端化改造、 多终端Session 统一 ,以及在大流量的情况下,如何跨越性能、网络和一个地区的电力瓶颈等内容,并提供了比较完整的解决方案。 《深入分析Java Web技术内幕(修订版)》主要围绕Java Web 相关技术从三方面全面、深入地进行了阐述。首先介绍前端知识,即在JavaWeb ......一起来看看 《深入分析Java Web技术内幕(修订版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具