当前位置: 首页 > news >正文

goLang学习笔记(一)

一:补充:go run/ go install/ go build / go get的区别

  • go run 运行当个.go文件
  • go install 在编译源代码之后还安装到指定的目录
  • go build 加上可编译的go源文件可以得到一个可执行文件
  • go get = git clone + go install 从指定源上面下载或者更新指定的代码和依赖,并对他们进行编译和安装

二:单引号、双引号和反引号

而在Go中,双引号是用来表示字符串string,其实质是一个byte类型的数组,单引号表示rune类型。还有一个反引号,用来创建原生的字符串字面量,它可以由多行组成,但不支持任何转义序列

三:变量

www.studygolang.com/articles/11…

1。声明单个变量
    var age int //如果没有为变量赋值,自动初始化,赋值该变量类型的零值
2。声明变量并初始化
    var age int = 29
3.类型推断,如果变量有初始值,那么go自动推断变量的类型
    var age = 29
4.声明多个变量
    var width, height int = 100,50
    声明不同类型的变量
    var (
        name = "bob"
        age = 20
        height int
    )
5.简短声明 操作符左边至少有一个变量是尚未声明的
    name, age := "bob", 29

go是强类型的,不允许某一类型的变量赋值为其他类型的值复制代码

四:类型

www.studygolang.com/articles/11…

1、go支持的基本类型:
    bool
    数字类型:
        int8,int16, int32, int64, int
        uint8, uint16, uint32, uint64, uint
        float32, float64
        complex64, complex128
        byte //uint8的别名
        rune //int32的别名
    string

2、有符号整型
int8:8位有符号整型,-128-127
int16:16位有符号整型  -32768-32767
int:根据不同的底层平台,表示32或64位整型   在32位系统下是32位,在64位系统下是64位

在Printf方法中,%T格式说明符,可以打印出变量的类型

go的unsafe包提供一个Sizeof函数,该函数接收变量并返回它的字节大小。unsafe包应该小心使用,使用unsafe包可能带来可移植性问题
    //Printf方法中,%T打印出变量的类型
    var num int = 89
    fmt.Printf("type num is %T,size of a is %d", num, unsafe.Sizeof(num))

3。无符号整型
uint8:表示8位无符号整型 0-255

4。浮点类型
float32:32浮点型   float64:64位浮点型

5。复数类型
complex64:实部和虚部都是float32类型的复数
complex128:实部和虚部都是float64类型的复数
    c1 := complex(5,7)
    c2 := 6+7i

6.string类型
    在go中,字符串是字节的集合

7。类型转换
    go有着严格的强类型特征,go没有自动类型提升和类型转换
    把v转换为T类型的语法是T(v)  i := 10   var j float64 = float64(i)复制代码

五:常量

www.studygolang.com/articles/11…

常量不能再重新赋值为其他的值,常量的值会在编译时确定。因为函数调用发生在运行时,所以不能将函数的返回值赋值给常量

    1。字符串常量
        a:无类型的字符串属于常量  const hello = "hello world"
        b:go是强类型语言,所有的变量都必须有明确的类型,那么下面是如何将无类型的常量Sam赋值给变量name的呢?
            var name = "Sam"
            无类型的常量有一个与他们相关联的默认类型,并且当且仅当一行代码需要时才提供
        c:创建一个带类型的常量    const typehello string = "hello world"
        d:不允许将一种类型的变量赋值给另一种类型的变量
            var defaultName = "Sam" //允许
            type myString string
            var customName myString = "Sam" //允许
            customName = defaultName //不允许

    2。布尔类型

    3。数字常量
        const a = 5
        var intVar int = a
        var int32var int32 = a

    4。数字表达式
        数字常量可以在表达式中自由混合和匹配,只有当它们被分配给变量或者在需要类型的代码中的任何地方使用时,才需要类型
        var a = 5.9/8  //a是float64复制代码

六:函数

www.studygolang.com/articles/11…

1。函数的声明
    func calculateBill(price int,no int) int {
        var total = price * no
        return total
    }
2.示例函数  如果有连续若干个参数,它们的类型一致,无须一一罗列,只需最后一个参数后添加该类型
    func calculateBill(price, no int) int {
        var total = price * no
        return total
    }

3、多返回值
    func rectProps(length, width float64)(float64, float64){
        var area = length * width
        var perimeter = (length + width) * 2
        return area, perimeter
    }

4、空白符
    _ 在go中被用作空白符,可以用作表示任何类型的任何值复制代码

七:包

www.studygolang.com/articles/11…

1、导出名字
    在go中,任何以大写字母开头的变量或者函数都是被导出的名字。

2、init函数  没有任何返回值类型和参数
    包的初始化:
        a:初始化包级别的变量
        b:紧接着调用init函数。包可以有多个init函数

3、使用空白标识符
    导入包,却不在代码中使用 是非法的    使用空白标识符复制代码

八:if-else语句

www.studygolang.com/articles/11…

if num := 10;num % 2 == 0 {
    fmt.Println(num)
} else {
    fmt.Println(num)
}复制代码

九:循环

www.studygolang.com/articles/11…

for是go语言唯一的循环语句
for i := 1;i <= 10;i++{
    fmt.Printf(i)
}复制代码

十:switch语句

www.studygolang.com/articles/11…

finger := 4
switch finger {
    case 1:
        fmt.Println(4)
}

1、默认情况
    switch finger := 8;finger {
        case 1:
            fmt.Println(4)
        default:
            fmt.Println(3)
    }

2、多表达式判断
    letter := "i"
    switch letter {
        case "a", "e", "i":
            fmt.Println("w")
        default:
            fmt.Println("not")
    }

3、无表达式的switch

4、Fallthrough语句
    使用Fallthrough语句可以在已经执行完成的case语句之后,把控制权转移到下一个case的执行代码中复制代码


转载于:https://juejin.im/post/5b7455cd6fb9a009cc500c1c

相关文章:

  • jar解压删除压缩
  • zlog使用手册
  • Dagger2基础篇(一)
  • CreatorPrimer|从zIndex开始
  • (day6) 319. 灯泡开关
  • python其他模块安装
  • jQuery普通绑定事件和on委托事件对比
  • 微信小程序实例:分享给一个人还是分享到群的判断代码
  • 线程与进程的区别(基础面试题)
  • C#将控件置于最顶层和最底层
  • 带有去重以及字符串拼接、日期拼接、字段相除的SQL语句
  • 面试题收集最新
  • js 数组排序
  • Andrew Ng-ML-第十九章-应用举例:照片OCR(光学字符识别)
  • 泛型的理解(1)
  • 2017-08-04 前端日报
  • CSS相对定位
  • Effective Java 笔记(一)
  • Java Agent 学习笔记
  • LeetCode18.四数之和 JavaScript
  • Magento 1.x 中文订单打印乱码
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis 懒删除(lazy free)简史
  • Sass 快速入门教程
  • Xmanager 远程桌面 CentOS 7
  • 高度不固定时垂直居中
  • 跨域
  • 利用DataURL技术在网页上显示图片
  • 区块链将重新定义世界
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 我从编程教室毕业
  • 原生Ajax
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 选择阿里云数据库HBase版十大理由
  • ​iOS安全加固方法及实现
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #define、const、typedef的差别
  • #stm32整理(一)flash读写
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2)nginx 安装、启停
  • (8)STL算法之替换
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (二)hibernate配置管理
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET值类型变量“活”在哪?
  • .stream().map与.stream().flatMap的使用
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @RequestBody与@ResponseBody的使用
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell