GO语言学习笔记

GO语言学习笔记

编译命令:go build xxx.go

运行命令:go run xxx.go

格式化命令:gofmt xxx.go

格式化后重写入文件命令:gofmt -w xxx.go

第一章、GO程序开发的注意事项

1、严格区分大小写

2、每个语句后不需要加分号

3、一行只能写一条语句

4、定义的变量或import的包如果没有使用到,代码不能编译通过

5、大括号是成对出现的,缺一不可

第二章、GO语言的转义字符

1、\t:一个制表符,通常用于排版

2、\n :换行符

3、\ :一个\

4、" :一个"

5、 \r :一个回车

第三章、GO语言变量

变量 = 变量名 + 值 + 数据类型

3.1 定义变量

package main
import "fmt"
func main(){
   
    //定义变量/声明变量
    var i int //变量名在前,变量类型在后
    //给i赋值
    i = 10
    //使用变量
    fmt.Println("i=",i)
}

3.2 单变量的三种使用方式

package main
import "fmt"
func main(){
   
    //第一种:指定变量类型,声明后若不赋值,使用默认值
    //int 的默认值是0,其他类型的默认值后续会介绍
    var i int
    fmt.Println("i=",i)
    
    //第二种:根据值自行判定变量类型(类型推导)
    var num = 10.11
    fmt.Println("num=",i)
    
    //第三种:省略 var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误
    //下面的方式等价 var name string   name = "tom"
    // :=的 :不能省略,否则错误
    name :="tom"
    fmt.Println("name=",i)
}

3.3 多变量的三种使用方式

package main
import "fmt"
func main(){
   
    //第一种:一次性声明同类型多个变量
    var n1,n2,n3 int
    fmt.Println("n1=",n1, "n2=",n2, "n3=",n3)

    //第二种:一次性声明不同类型多个变量
    var a1,a2,a3 =100, "tom", 88.8
    fmt.Println("a1=",a1, "a2=",a2, "a3=",a3)

    //第三种:一次性声明不同类型多个变量(类型推导)
    b1,b2,b3 :=100, "tom", 88.8
    fmt.Println("b1=",b1, "b2=",b2, "b3=",b3)
}

3.4 全局变量

package main
import "fmt"

//定义全局变量
var n1 = 100
var n2 = 8.8
var n3 = "jiho"

//上面的声明方式也可以改写成一次性声明
var(
    n4 = 200
    n5 = 9.9
    n6 = "hello"
)

func main(){
   
    fmt.Println("n1=",n1, "n2=",n2, "n3=",n3)
    fmt.Println("n4=",n4, "n5=",n5, "n6=",n6)
}

3.5 程序中 + 号的使用

1)当左右两边都是数值型时,则做加法运算

  1. 当左右两边都是字符串,则做字符串拼接

3.6 数据类型的基本介绍

请添加图片描述

3.6.1 整型

类型 有无符号 占用存储空间 表数范围
int8 1字节 -128~127
int16 2字节 -215~215-1
int32 4字节 -231~231-1
int64 8字节 -263~263-1
类型 有无符号 占用存储空间 表数范围
uint8 1字节 0~255
uint16 2字节 0~2^16-1
uint32 4字节 0~2^32-1
uint64 8字节 0~2^64-1
类型 有无符号 占用存储空间 表数范围 备注
int 32位系统4个字节
64位系统8个字节
-231~231-1
-263~263-1
uint 32位系统4个字节
64位系统8个字节
0~2^32-1
0~2^64-1
rune 与int32一样 -231~231-1 等价int32,表示一个Unicode码
byte 与uint8等价 0~255 当要存储字符时选用byte

3.6.2 整型的使用细节

  1. Golang 各整数类型分:有符号和无符号,int uint 的大小和系统有关。

  2. Golang 的整型默认声明为 int 型

  3. 如何在程序查看某个变量的字节大小和数据类型 (使用较多

package main
//包导入方式一
//import "fmt"
//import "unsafe"
//包导入方式二(专业级)
import (
	"fmt"
    "unsafe"
)

func main(){
   
    var a int64 =10
    //fmt.Printf:用于做格式化输出
    //Sizeof(a):是unsafe包的一个函数,用于返回a变量占用的字节数
    //%T:查看具体数据类型;%d:查看数值大小
    fmt.Printf("a的类型%T a占用的字节数是%d",a,unsafe.Sizeof(a))
}

4)Golang 程序中整型变量在使用时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量

使用占用空间小的数据类型。【如:年龄】

  1. bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。

3.7 浮点型

3.7.1 浮点型

  • 浮点数=符号位+指数位+尾数位
类型 占用存储空间 表数范围
单精度float32 4字节 -3.403E38 ~ 3.403E38
双精度float64 8字节 -1.798E308 ~ 1.798E308

1)float64 的精度比 float32 的要准确.

2)如果我们要保存一个精度高的数,则应该选用 float6。

3)浮点型的存储分为三部分:符号位+指数位+尾数位 在存储过程中,精度会有丢失。

3.7.2 浮点型的使用细节

  1. Golang 浮点类型有固定的范围和字段长度,不受具体 OS(操作系统)的影响。

  2. Golang 的浮点型默认声明为 float64 类型。

  3. 浮点型常量有两种表示形式

十进制数形式:如:5.12 .512 (必须有小数点,等价于0.512)

科学计数法形式:如:5.1234e2 等价于 5.12 * 10 的 2 次方 5.12e-2 = 5.12 / 10 的 2 次方

​ 5.1234E2 等价于 5.12 * 10 的 2 次方 5.12E-2 = 5.12 / 10 的 2 次方

  1. 通常情况下,应该使用 float64 ,因为它比 float32 更精确。[开发中,推荐使用 float64]

3.8 字符型

3.8.1 字符型

  • Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 保存。

  • 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也

    就是说对于传统的字符串是由字符组成的,而 Go 的字符串不同,它是由字节组成的。

package main
import "fmt"

func main(){
   
    var a1 byte = 'a'
    var a2 byte = '0'

    //当我们直接输出byte值时,就是直接输出了对应的字符的码值
    fmt.Println("a1=",a1,"a2=",a2)

    //若要输出对应的字符,则需要使用格式化输出
    fmt.Printf("a1=%c a2=%c\n",a1,a2)

    //var a3 byte = '北'    //overflow溢出
    var a3 int = '北'    //改用存储空间更大的int即可
    fmt.Printf("a3=%c a3对应的码值=%d\n",a3,a3)
}

3.8.2 字符型的使用细节

  1. 字符常量是用单引号(’’)括起来的单个字符。例如:var c1 byte = ‘a’

var c2 int = ‘中’

var c3 byte = ‘9’

  1. Go 中允许使用转义字符 '\’来将其后的字符转变为特殊字符型常量。例如:var c3 char = ‘\n’

// '\n’表示换行符

  1. Go 语 言 的 字 符 使 用 UTF-8 编 码 , 如 果 想 查 询 字 符 对 应 的 utf8 码 值 http://www.mytju.com/classcode/tools/encode_utf8.asp

英文字母-1 个字节 汉字-3 个字节

  1. 在 Go 中,字符的本质是一个整数,直接输出时,是该字符对应的 UTF-8 编码的码值。

  2. 可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的 unicode 字符。

  3. 字符类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码.。

3.8.3 字符型的本质

  1. 字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来 。

存储:字符—>对应码值---->二进制–>存储

读取:二进制----> 码值 ----> 字符 --> 读取

  1. 字符和码值的对应关系是通过字符编码表决定的(是规定好) 。

  2. Go 语言的编码都统一成了 utf-8。非常的方便,很统一,再也没有编码乱码的困扰了。

3.9 布尔型

3.9.1 布尔类型

  1. 布尔类型也叫 bool 类型,在GO中只能取值 true 或 false

  2. bool 类型占 1 个字节。

package main
import (
    "fmt"
    "unsafe"
)
func main(){
   
    var b = false
    fmt.Println("b=",b)
    fmt.Println("b 的占用空间 =",unsafe.Sizeof(b))
}
  1. bool 类型适于逻辑运算,一般用于程序流程控制
  • if 条件控制语句;

  • for 循环控制语句

3.10 字符串类型

3.10.1 字符串类型

字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本

package main
import (
    "fmt"
)

func main(){
   
    var s string = "北京欢迎您!"
    fmt.Println(s)
}

3.10.2 字符串类型的使用细节

  1. Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本,这样 Golang 统一使用 UTF-8 编码,中文

乱码问题不会再困扰程序员。

  1. 字符串一旦赋值了,字符串就不能修改了:在 Go 中字符串是不可变的。

请添加图片描述

  1. 字符串的两种表示形式

(1) ""双引号, 会识别转义字符

(2) ``反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果

func main(){
   
    var s string = `
    package main
    import "fmt"
    func main(){
        //定义变量/声明变量
        var i int //变量名在前,变量类型在后
        //给i赋值
        i = 10
        //使用变量
        fmt.Println("i=",i)
    }`
    fmt.Println(s)
}
  1. 字符串拼接方式
func main(){
   
    var str string = "hello" + "world"
    str += "yy"
    fmt.Println(str)
}
  1. 当一行字符串太长时,需要使用到多行字符串,可以如下处理
func main(){
   
    //将 + 号留在上一行
    var str string = "hello" + "world" +
     "hello" + "world" +
     "hello" + "world" +
     "hello" + "world"

    fmt.Println(str)
}

3.11 基本数据类型默认值

数据类型 默认值
整型 0
浮点型 0
字符串
false
func main(){
   
    var a int 
    var b float32
    var c float64
    var d bool
    var e string
    //%v:按照变量的值输出
    fmt.Printf("a=%d b=%v c=%v d=%v e=%v",a,b,c,d,e)
}

3.12 数据类型的相互转换

  • Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Golang 中数据类型不能自动转换

3.12.1 基本语法

表达式=T(v) //将值 v 转换为类型 T

T: 就是数据类型,比如 int32,int64,float32 等等

v: 就是需要转换的变量

func main(){
   
   var i int32 = 100
   var n1 float32 = float32(i) //将 i => float类型
   var n2 int8 = int8(i)       //高精度 -> 低精度
   var n3 int64 = int64(i)     //低精度 -> 高精度
   fmt.Printf("i=%v n1=%v n2=%v n3=%v",i ,n1,n2,n3)
}

3.12.2 注意事项

  1. Go 中,数据类型的转换可以是从 表示范围小–>表示范围大,也可以 范围大—>范围小

  2. 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!

  3. 在转换中,比如将 int64 转成 int8 【-128—127】 ,编译时 不会报错 ,只是转换的结果是

溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围.

func main(){
   
    var n1 int32 = 12
    var n2 int8
    //var n3 int8
    n2 = int8(n1) + 127 //编译通过,但是 结果 不是127+12 ,按溢出处理
    //n3 = int8(n1) + 128 //编译不过
    fmt.Println(n2)
    //fmt.Printf(n3)
}

3.12.3 基本数据类型转string

  • 方式 1:fmt.Sprintf("%参数", 表达式) 【个人习惯这个,灵活

    func main(){
         
       var num1 int = 99
       var num2 float64 = 23.234
       var b bool = true
       var mychar byte = 'h'
       var str string   //空的str
    
       str = fmt.Sprintf("%d",num1)
       fmt.Printf("str type %T str=%q\n", str, str)
       str = fmt.Sprintf("%f",num2)
       fmt.Printf("str type %T str=%q\n", str, str)
       str = fmt.Sprintf("%t",b)
       fmt.Printf("str type %T str=%q\n", str, str)
       str = fmt.Sprintf("%c",mychar)
       fmt.Printf("str type %T str=%q\n", str, str)
    }
    
    • 方式 2:使用 strconv 包的函数
      请添加图片描述

      func main(){
             
         var num1 int = 99
         var num2 float64 = 23.234
         var b bool = true
         var str string   //空的str
      
         str = strconv.FormatInt(int64(num1),10)  //10:十进制
         fmt.Printf("str type %T str=%q\n", str, str)
         str = strconv.FormatFloat(num2, 'f', 10, 64) //'f':格式 10:表示小数位保留10位  64:表示这个小数是float64
         fmt.Printf("str type %T str=%q\n", str, str)
         str = strconv.FormatBool(b)
         fmt.Printf("str type %T str=%q\n", str, str)
      }
      

3.12.4 string转基本数据类型

  • 使用时 strconv 包的函数

请添加图片描述

func main(){
   
    var str string = "true"
    var b bool
    // b, _ = strconv.ParseBool(str) 说明
    // 1. strconv.ParseBool(str)函数会返回两个值 (value bool, err error)
    // 2. 因为我只想获取到 value bool ,不想获取 err 所以我使用 _ 忽略
    b, _  = strconv.ParseBool(str)
    fmt.Printf("b type %T b=%v\n", b, b)

    var str2 string = "123456"
    var n1 int64
    var n2 int
    n1, _ = strconv.ParseInt(str2, 10, 64)
    n2 = int(n1)
    fmt.Printf("n1 type %T n1=%v\n", n1, n1)
    fmt.Printf("n2 type %T n2=%v\n", n2, n2)

    var str3 string = "123.456"
    var f1 float64
    f1, _ = strconv.ParseFloat(str3, 64)
    fmt.Printf("f1 type %T f1=%v\n", f1, f1)
}

3.12.5 string转基本数据类型的注意事项

  • 在将 String 类型转成 基本数据类型时,要确保 String 类型能够转成有效的数据,比如 我们可以

    把 “123” , 转成一个整数,但是不能把 “hello” 转成一个整数,如果这样做,Golang 直接将其转成 0(默认值) , 其它类型也是一样的道理. float => 0 bool => false

3.13 指针

3.13.1 基本介绍

  1. 基本数据类型,变量存的就是值,也叫值类型

  2. 获取变量的地址,用&,比如: var num int, 获取 num 的地址:&num

​ 分析一下基本数据类型在内存的布局

请添加图片描述

  1. 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值

​ 比如:var ptr *int = &num

​ 举例说明:指针在内存的布局.

请添加图片描述

  1. 获取指针类型所指向的值,使用:*,比如:var ptr int, 使用ptr 获取 ptr 指向的值
func main(){
   
    //基本数据类型在内存布局
    var i int = 10
    // i 的地址是什么,&i
    fmt.Println("i的地址=", &i)

    //下面的 var ptr *int = &i
    //1. ptr 是一个指针变量
    //2. ptr 的类型 *int
    //3. ptr 本身的值&i
    var ptr *int = &i
    fmt.Printf("ptr=%v\n", ptr)
    fmt.Printf("ptr 的地址=%v\n", &ptr)
    fmt.Printf("ptr 指向的值=%v\n", *ptr)
}

5)一个案例再说明

请添加图片描述

3.13.2 通过指针修改值

  1. 写一个程序,获取一个 int 变量 num 的地址,并显示到终端

  2. 将 num 的地址赋给指针 ptr , 并通过 ptr 去修改 num 的值

func main(){
   
    var num int = 10
    var ptrx *int = &num
    fmt.Printf("num的值=%v\n", num)
    fmt.Printf("num的地址=%v\n", ptrx)

    var ptr *int = &num
    *ptr = 11
    fmt.Printf("num现在的值=%v\n", num)
    fmt.Printf("ptr的地址=%v\n", &ptr)
    fmt.Printf("ptr的值=%v\n", ptr)
    fmt.Printf("ptr指向的值=%v\n", *ptr)

}

3.13.3 指针的使用细节

  1. 值类型,都有对应的指针类型, 形式为 *数据类型 ,比如 int 的对应的指针就是 *int, float32 对应的指针类型就是 *float32, 依次类推。

  2. 值类型包括:基本数据类型 int 系列, float系列, bool, string 、数组结构体 struct

3.14 值类型和引用类型

  1. 值类型:基本数据类型 int 系列, float系列, bool, string 、数组结构体 struct

  2. 引用类型:指针、slice 切片、map、管道 chan、interface 等都是引用类型 。

3,14,1 值类型

  • 值类型:变量直接存储值,内存通常在栈中分配

示意图:

请添加图片描述

3.14.2 引用类型

  • 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由 GC 来回收

示意图:

请添加图片描述

3.14.3 内存的栈区堆区

示意图

请添加图片描述

3.15 标识符的命名规范

  1. Golang 对各种变量、方法、函数等命名时使用的字符序列称为标识符

  2. 凡是自己可以起名字的地方都叫标识符

3.15.1 命名规则

  1. 由 26 个英文字母大小写,0-9 ,_ 组成。

  2. 数字不可以开头。

var num int //√
var 3num int //×
  1. Golang 中严格区分大小写。
var num int 
var Num int

说明:在 golang 中,num 和 Num 是两个不同的变量

  1. 标识符不能包含空格。

  2. 下划线"_"本身在 Go 中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能被作为占位符使用,不能作为标识符使用

var _ int = 10  //×
var a_1 int = 10//√
fmt.Println(_)  //×
fmt.Println(a_1)//√
  1. 不能以系统保留关键字作为标识符(一共有 25 个),比如 break,if 等等…

3.15.2 注意事项

  1. 包名:保持 package 的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,不要和标准库(fmt)冲突

请添加图片描述

  1. 变量名、函数名、常量名:采用驼峰法

举例:

var stuName string = “tom”

形式: xxxYyyyyZzzz …

var goodPrice float32 = 1234.5

  1. 如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用 ( 注:可以简单的理解成,首字母大写是公开的首字母小写是私有的) ,在 golang 没有 public , private 等关键字。

请添加图片描述

请添加图片描述

3.16 系统保留关键字

在GO中,为了简化代码编译过程中对代码的解析,其定义的保留关键字 只有25个。

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

3.17 系统的预定义标识符

除了保留关键字外,GO还提供了36个预定的标识符,其包括基础数据类型和系统內嵌函数

append bool byte cap close complex
complex64 complex128 uint16 copy false float32
float64 imag int int8 int16 uint32
int32 int64 iota len make new
nil panic uint64 print println real
recover string true uint uint8 uintprt

第四章、运算符

4.1 算术运算符

  • 算术运算符是对数值类型的变量进行运算的,比如:加减乘除。在 Go 程序中使用的非常多

  • GO语言明确不支持三元运算符

    func main(){
          
        var i int = 10
        var j int = 20
        var n int
        //传统的三元运算
        //n = i > j ? i : j
        if i > j {
          
            n = i
        }else{
          
            n = j
        }
        fmt.Println("n=",n)
    }
    

4.1.1 算术运算符表

运算 正号 负号 取模(取余) 自增 自减 字符串相加
运算符 + - + - * / % ++ +
  • 自增,自减的使用

    func main(){
         
        var a int = 13
        a--;
        fmt.Println(a);
    }
    

4.1.2 注意事项

  1. 对于除号 “/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 例如: x := 19/5 ,结果是 3

  2. 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算。

  3. Golang 的自增自减只能当做一个独立语言使用时,不能这样使用。

请添加图片描述

  1. Golang 的++ 和 – 只能写在变量的后面,不能写在变量的前面,即:只有 a++ a-- 没有 ++a --a

请添加图片描述

  1. Golang 的设计者去掉 c / java 中的 自增自减的容易混淆的写法,让 Golang 更加简洁,统一。(强 制性的)

4.2 关系运算符(比较运算符)

  1. 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false

  2. 关系表达式 经常用在 if 结构的条件中或循环结构的条件中

4.2.1 关系运算符表

运算符 运算 范例 结果
== 相等于 4==3 false
!= 不等于 4!=3 true
< 小于 4<3 false
> 大于 4>3 true
<= 小于等于 4<=3 false
>= 大于等于 4>=3 true
func main(){
   
    var a int = 4
    var b int = 5
    fmt.Println(a==b)//false
    fmt.Println(a!=b)//true
    fmt.Println(a>b)//false
    fmt.Println(a<b)//true
    fmt.Println(a>=b)//false
    fmt.Println(a<=b)//true
    flag := a>b
    fmt.Println("flag=",flag)//false
}

4.2.2 注意事项

  1. 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false。

  2. 关系运算符组成的表达式,我们称为关系表达式: a > b

  3. 比较运算符"=="不能误写成 “=”

4.3 逻辑运算符

用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 bool 值。

4.3.1 逻辑运算符表

运算符 描述
&& 逻辑,一假则假
|| 逻辑,一真则真
逻辑,取反
func main(){
   
    var age int = 40
    //if的条件只有为true时才会执行fmt.Println
    //逻辑或
    if age > 30 && age < 50 {
   
        fmt.Println("ok1")
    }
    if age > 30 && age < 40 {
   
        fmt.Println("ok2")
    }
    
    //逻辑与
    if age > 30 || age < 50 {
   
        fmt.Println("ok3")
    }
    if age > 30 || age < 40 {
   
        fmt.Println("ok4")
    }

    //逻辑非
    if age > 30 {
   
        fmt.Println("ok5")
    }
    if !(age > 30) {
   
        fmt.Println("ok6")
    }
}

4.3.2 注意事项

1)&&也叫短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false

  1. ||也叫短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true

4.4 赋值运算符

赋值运算符就是将某个运算后的值,赋给指定的变量。

4.4.1 赋值运算符 表

运算符 = += -= *= /= %=
说明 赋值 先加后赋值 先减后赋值 先乘后赋值 先除后赋值 先取余后赋值
运算符 <<= >>= &= ^= |=
说明 先左移后赋值 先右移后赋值 按位与后赋值 按位异或后赋值 按位或后赋值

4.4.2 赋值运算符的特点

  1. 运算顺序**从右往左 **

  2. 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值

  3. 复合赋值运算符等价于下面的效果

比如:a += 3 等价于 a = a + 3

4.4.3 面试题

有两个变量,a 和 b,要求将其进行交换,但是不允许使用中间变量,最终打印结果

func main(){
   
    var a int = 10
    var b int = 20
    
    a = a + b
    b = a - b
    a = a - b
    fmt.Printf("a=%d,b=%d\n",a,b)
}

4.5 位运算符

运算符 描述 运算规则
& 按位与运算符“&”是双目运算符 一假则假
| 按位或运算符“|”是双目运算符 一真则真
^ 按位异或运算符“^”是双目运算符 不同为真,同为假
<< 左移运算符“<<”是双目运算符 g
>> 右移运算符“>>”是双目运算符 暂未知

4.6 其它运算符说明

运算符 描述 实例
& 返回变量存储地址 &a;将给出变量的实际地址
* 指针变量 *a;是一个指针变量
func main(){
   
    a := 100
    fmt.Println("a的地址=", &a)

    var ptr *int = &a
    fmt.Println("ptr指向的值=", *ptr)
}

4.7 课堂案例

4.7.1 案例1

求两个数的最大值

func main(){
   
    //求两个数的最大值
    var a int = 10
    var b int = 20
    var max int
    if a > b {
   
        max = a
    }else{
   
        max = b
    }
    fmt.Println(max)
}

4.7.2 案例2

求三个数的最大值

func main(){
   
    //求三个数的最大值
    var a int = 10
    var b int = 20
    var c int = 15
    var max int
    if a > b {
   
        max = a
    }else{
   
        max = b
    }
    if c > max {
   
        max = c
    }
    fmt.Println(max)
}

4.8 运算符的优先级

4.8.1 运算符的优先级的一览表

请添加图片描述

4.8.2 对上图的说明

  1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。

  2. 只有单目运算符、赋值运算符是从右向左运算的。

  3. 梳理了一个大概的优先级

1:括号,++, –

2: 单目运算

3:算术运算符

4:移位运算

5:关系运算符

6:位运算符

7:逻辑运算符

8:赋值运算符

9:逗号

4.9 键盘输入语句

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。InputDemo.go

4.9.1 步骤 :

1)导入 fmt 包

  1. 调用 fmt 包的 fmt.Scanln() 或者 fmt.Scanf()

请添加图片描述
请添加图片描述

4.9.2 课堂案例

1)使用**fmt.Scanln()**获取

func main(){
   
    var name string 
    var age byte
    var sal float32
    var ispass bool
    fmt.Println("请输入姓名:")
    fmt.Scanln(&name)
    fmt.Println("请输入年龄:")
    fmt.Scanln(&age)
    fmt.Println("请输入薪水:")
    fmt.Scanln(&sal)
    fmt.Println("请输入是否通过考试:")
    fmt.Scanln(&ispass)
    fmt.Printf("姓名:%v\n年龄:%v\n薪水:%v\n是否通过考试:%v\n",name,age,sal,ispass)
}

2)使用**fmt.Scanf() **获取

func main(){
   
    var name string 
    var age byte
    var sal float32
    var ispass bool
    fmt.Println("请输入姓名,年龄,薪水,是否通过考试;并用空格隔开:")
    fmt.Scanf("%s %d %f %t",&name ,&age, &sal, &ispass)
    fmt.Printf("姓名:%v\n年龄:%v\n薪水:%v\n是否通过考试:%v\n",name,age,sal,ispass)
}

4.10 进制

  • 对于整数,有四种表示方式:
  1. 二进制:0,1 ,满 2 进 1。

​ 在 golang 中,不能直接使用二进制来表示一个整数,它沿用了 c 的特点。

  1. 十进制:0-9 ,满 10 进 1。

  2. 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。

  3. 十六

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝焰鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值