赞
踩
【1】搭建Go开发环境-安装和配置SDK
基本介绍:
【2】.SDK下载
【3】.安装sdk:
【1】.DOS操作系统
【2】.Dos命令
【3】命令学习
【4】具体dos命令
【1】进入到go语言的目录下查看是否安装成功
【2】如果我想要在任意的路径下执行某个命令,需要将这个命令所在的目录配置到环境变量path中
【3】.重新验证一下:
【1】.go语言基本结构:
【2】第一个Helloworld
- package main //声明文件所在的包,每个go文件必须有归属的包
- import "fmt" //引入程序中需要用的包,为了使用包下的函数
- func main() { //主函数,程序的入口
- fmt.Println("Hello Golang!") //在控制台打印输出一句话,双引号中的内容会原样输出
- }
【3】对源文件test.go进行编译:
go build
【4】执行操作:
【5】通过go run直接可以帮我们编译执行源文件:
【6】.编译的注意事项:
可以在编译的时候重新去命名一个新的名字
【2】Golang中注释类型
go语言的官方文档库:https://studygolang.com/pkgdoc
变量相当于内存中一个数据存储空间的表示
- package main
-
- import "fmt"
-
- func main() {
- // 1.变量的声明
- var age int
- // 2.变量的赋值
- age = 18
- // 3.变量的使用
- fmt.Println("age = ", age)
-
- // 声明和赋值可以合成一句
- var age2 int = 19
- fmt.Println("age2 = ", age2)
- }
如果一个变量age被重复定义之后会报错 ,不可以再赋值的时候给不匹配的类型
- package main
-
- import "fmt"
-
- func main() {
- // 第一种:变量的使用方式
- var num int = 18
- fmt.Println(num)
- // 第二种:使用变量的类型,但是不赋值,使用默认值
- var num2 int
- fmt.Println(num2)
-
- // 第三种:如果没有写变量的类型,那么会根据等号后面的值进行判定变量的类型(自动类型的判断)
- var num3 = "tom"
- fmt.Println(num3)
-
- // 第四种:省略var :=不能写为=
- sex := "男"
- fmt.Println(sex)
- }
- package main
-
- import "fmt"
-
- // 全局变量:定义再函数外面的变量叫做全局变量
- var n7 = 100
- var n8 = 9.7
-
- // 以上定义全局变量太麻烦了,可以一次性声明
- var (
- n9 = 715
- n10 = "myy"
- )
-
- func main() {
- // 定义在{}里面的变量叫做局部变量
- // 第一种:变量的使用方式
- var num int = 18
- fmt.Println(num)
- // 第二种:使用变量的类型,但是不赋值,使用默认值
- var num2 int
- fmt.Println(num2)
-
- // 第三种:如果没有写变量的类型,那么会根据等号后面的值进行判定变量的类型(自动类型的判断)
- var num3 = "tom"
- fmt.Println(num3)
-
- // 第四种:省略var :=不能写为=
- sex := "男"
- fmt.Println(sex)
-
- fmt.Println("-----------------------------------------------------")
-
- // 声明多个变量
- var n1, n2, n3 int
- fmt.Println(n1)
- fmt.Println(n2)
- fmt.Println(n3)
-
- var n4, name, n5 = 10, "jack", 7.5
- fmt.Println(n4)
- fmt.Println(name)
- fmt.Println(n5)
-
- n6, height := 6.9, 100.6
- fmt.Println(n6)
- fmt.Println(height)
-
- fmt.Println(n7)
- fmt.Println(n8)
- fmt.Println(n9)
- fmt.Println(n10)
- }
简单来说,用于存放整数值的,比如10,-45
代码测试超出范围:
超出边界报错:
类型 | 有无符号 | 占用存储空间 | |
int | 有 | 32位系统~4字节 64位系统~8字节 | |
uint | 无 | 32位系统~4字节 64位系统~8字节 | |
rune | 有 | 等价int32 | |
byte | 无 | 等价uint8 |
变量占用的字节数:
- package main
-
- import (
- "fmt"
- "unsafe"
- )
-
- func main() {
- // 定义一个整数类型
- var num1 int8 = 120
- fmt.Println(num1)
-
- // var num2 uint8 = 200
- // fmt.Println(num2)
- var num3 = 28
- // printf函数的作用:格式化,把num3类型填充到%p的位置上
- fmt.Printf("num3的类型是:%p", num3)
- fmt.Println(unsafe.Sizeof(num3))
- }
简单来说,就是用于存放小数值的,比如3.14、0.28
- package main
-
- import "fmt"
-
- func main() {
- // 定义浮点类型的数据
- var num1 float32 = 3.14
- fmt.Println(num1)
- // 可以表示正浮点数,也可以表示负浮点数
- var num2 float32 = -3.14
- fmt.Println(num2)
- // 浮点数可以用十进制表示,也可以用科学计数法表示形式,E大小写都可以
- var num3 float32 = 314e-2
- fmt.Println(num3)
- var num4 float32 = 314e+2
- fmt.Println(num4)
- var num5 float32 = 314e+2
- fmt.Println(num5)
- var num6 float64 = 314e+2
- fmt.Println(num6)
-
- // 浮点数可能会有精度损坏,所以通常情况下,建议你使用:float64
- var num7 float32 = 256.00000000916
- fmt.Println(num7)
- var num8 float64 = 256.00000000916
- fmt.Println(num8)
-
- // golang中默认的浮点类型为:float64
- var num9 = 3.17
- fmt.Printf("num9对应的默认的类型为:%T", num9)
- }
- package main
-
- import "fmt"
-
- func main() {
- // 定义字符类型的数据:
- var c1 byte = 'a'
- fmt.Println(c1) //97
- var c2 byte = '6'
- fmt.Println(c2) //54
- var c3 byte = '('
- fmt.Println(c3 + 20) //40
- // 字符类型,本质上就是一个整数,也可以直接参与运算,输出字符的时候,会将对应的码值做一个输出
- // 字母,数字,标点等字符,底层是按照ASCII进行存储
-
- var c4 int = '中'
- fmt.Println(c4)
- // 汉字字符,底层对应的是Unicode码值
- // 对应的码值为20013,byte类型溢出,能存储范围:可以用int
- // 总结:Golang的字符对应的使用是UTF-8编码
-
- var c5 byte = 'A'
- // 想显示对应的字符,必须采用格式化输出
- fmt.Printf("c5对应的具体的字符为:%c",c5)
- }
- package main
-
- import "fmt"
-
- func main() {
- // 练习转义字符
- // \n换行
- fmt.Println("aaa\nbbb")
- // \b退格
- fmt.Println("aaa\bbbb")
- // \r 光标回到本行开头,后续输入就会替换原本的字符
- fmt.Println("aaaaa\rbbb")
- // \t制表符
- fmt.Println("aaaaaaaaaa")
- fmt.Println("aaaa\tbbbb")
- fmt.Println("aaaaaaaa\tbbbb")
-
- // \"
- fmt.Println("\"Golang\"")
- }
- package main
-
- import "fmt"
-
- func main() {
- // 测试布尔类型的数值:
- var flag01 bool = true
- fmt.Println(flag01)
-
- var flag02 bool = false
- fmt.Println(flag02)
-
- var flag03 bool = 5 < 9
- fmt.Println(flag03)
- }
字符串就是一串固定长度的字符连接起来的字符序列。
- package main
-
- import "fmt"
-
- func main() {
- // 1.定义一个字符串:
- var s1 string = "你好全面拥抱Golang"
- fmt.Println(s1)
- // 2.字符串是不可变的:指的是字符串一旦定义好,其中的字符的值不能改变
- // var s2 string = "abc"
- // s2 = "def"
- // s2[0] = 't'
- // fmt.Println(s2)
- // 3.字符串的表示形式:
- // (1).如果字符串没有特殊字符,字符串的表示形式用双引号
- var s3 string = "abcdefghigklmnopqrstuvwsyz"
- fmt.Println(s3)
- // (2).如果字符串中有特殊符号,字符串的表示形式用反引号``
- var s4 string = `
- package main
- import "fmt"
- func main() {
- // 测试布尔类型的数值:
- var flag01 bool = true
- fmt.Println(flag01)
- var flag02 bool = false
- fmt.Println(flag02)
- var flag03 bool = 5 < 9
- fmt.Println(flag03)
- }`
- fmt.Println(s4)
-
- //4.字符串的拼接效果
- var s5 string = "abc" + "def"
- s5 += "hijk"
- fmt.Println(s5)
-
- // 5.当一个字符串过长的时候:
- var s6 string = "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" + "def"
-
- fmt.Println(s6)
- }
- package main
-
- import "fmt"
-
- func main() {
- var a int
- var b float32
- var c float64
- var d bool
- var e string
- fmt.Println(a)
- fmt.Println(b)
- fmt.Println(c)
- fmt.Println(d)
- fmt.Println(e)
- }
- package main
-
- import "fmt"
-
- func main() {
- // 进行类型转换:
- var n1 int = 100
- // var n2 float32 = n1 在这里 自动转换不好使,比如显示转换
- fmt.Println(n1)
- // fmt.Println(n2)
- var n2 float32 = float32(n1)
- fmt.Println(n2)
- // 注意:n1的类型其实还是int类型,只是将n1的值100转为了float32而已,n1还是int的类型
- fmt.Printf("%T", n1) //int
- fmt.Println()
-
- // 将int64转为int8的时候,编译不会出错的,但是会数据的溢出
- var n3 int64 = 888888
- var n4 int8 = int8(n3)
- fmt.Println(n4) //56
-
- var n5 int32 = 12
- var n6 int64 = int64(n5) + 30 //一定匹配=左右的数据类型
- fmt.Println(n5)
- fmt.Println(n6)
-
- var n7 int64 = 12
- var n8 int8 = int8(n7) + 127 //编译通过,但是结果可能会溢出
- // var n9 int8 = int8(n7) + 128 //编译不会溢出
- fmt.Println(n8)
- // fmt.Println(n9)
- }
基本数据类型和string的转换介绍
基本类型转型为string类型
- package main
-
- import "fmt"
-
- func main() {
- var n1 int = 19
- var n2 float32 = 4.78
- var n3 bool = false
- var n4 byte = 'a'
-
- var s1 string = fmt.Sprintf("%d", n1)
- fmt.Printf("s1对应的类型是:%T,s1=%q \n", s1, s1)
-
- var s2 string = fmt.Sprintf("%f", n2)
- fmt.Printf("s2对应的类型是:%T,s2=%q \n", s2, s2)
-
- var s3 string = fmt.Sprintf("%t", n3)
- fmt.Printf("s3对应的类型是:%T,s3=%q \n", s3, s3)
-
- var s4 string = fmt.Sprintf("%c", n4)
- fmt.Printf("s4对应的类型是:%T,s4=%q \n", s4, s4)
- }
- package main
-
- import (
- "fmt"
- "strconv"
- )
-
- func main() {
- var n1 int = 18
- var s1 string = strconv.FormatInt(int64(n1), 10) //参数:第一个参数必须转为int64类型,第二个参数指定字面值的进制形式为十进制
- fmt.Printf("s1对应的类型是:%T,s1=%q \n", s1, s1)
-
- var n2 float64 = 4.29
- var s2 string = strconv.FormatFloat(n2, 'f', 9, 64)
- // 第二个参数:'f'(-ddd.ddd) 第三个参数:9保留小数后面9位
- fmt.Printf("s2对应的类型是:%T,s1=%q \n", s2, s2)
-
- var n3 bool = true
- var s3 string = strconv.FormatBool(n3)
- fmt.Printf("s3对应的类型是:%T,s1=%q \n", s3, s3)
- }
string类型转为基本数据类型
方法:使用strconv包的函数
- package main
-
- import (
- "fmt"
- "strconv"
- )
-
- func main() {
- // string --->bool
- var s1 string = "true"
- var b bool
- // ParseBool这个函数的返回值有两个:(value bool,err,error)
- // value就是我们得到的布尔类型的数据,err出现的错误
- // b = strconv.ParseBool(s1)
- // 我们只关注得到的布尔类型的数据,err可以用_直接忽略
- b, _ = strconv.ParseBool(s1)
- fmt.Printf("b对应的类型是:%T,b=%v \n", b, b)
-
- // string --->int64
- var s2 string = "19"
- var num1 int64
- num1, _ = strconv.ParseInt(s2, 10, 64)
- fmt.Printf("num1的类型是:%T,num1=%v \n", num1, num1)
-
- // string -->float32/float64
- var s3 string = "3.14"
- var f1 float64
- f1, _ = strconv.ParseFloat(s3, 64)
- fmt.Printf("f1的类型是:%T,f1=%v \n", f1, f1)
-
- var s4 string = "true"
- var b1 bool
- b1, _ = strconv.ParseBool(s4)
- fmt.Printf("b1对应的类型是:%T,b1=%v \n", b1, b1)
-
- // 注意:string向基本数据类型转换的时候,一定确保string类型能够转成有效的数据类型,否则最后得到的结果就是按照对应类型的默认值输出
- var s5 string = "19"
- var num2 int64
- num2, _ = strconv.ParseInt(s5, 10, 64)
- fmt.Printf("num2的类型是:%T,num2=%v \n", num2, num2)
- }
基本数据类型和内存:
- package main
-
- import (
- "fmt"
- )
-
- func main() {
- var age = 18
- // &符号+变量就可以获取这个变量的内存地址
- fmt.Println(&age) //0xc00005c030
-
- // 定义一个指针变量
- // var 代表要声明一个变量
- // ptr对应的类型是:*int是一个指针类型(可以理解位指向int类型的指针)
- // &age就是一个地址,是ptr变量得具体的值
- var ptr *int = &age
- fmt.Println(ptr)
- fmt.Println("ptr本身这个存储空间得地址为:", &ptr)
-
- // 想获取ptr这个指针或者这个地址指向得那个数据:
- fmt.Printf("ptr指向得数值为:%v", *ptr) //ptr指向得数值为:18
-
- }
指针的细节:
变量,方法等,只能是起名字的地方,那个名字叫做标识符
标识符的定义规则:
起名规则:
注意:
需要定义一个环境变量
main/test.go
- package main
-
- import (
- "fmt"
- "gocode/testproject01/unit2/demo17/test"
- )
-
- // 程序的入口函数
- func main() {
- // 如果util.go中定义的是StuNo的话,那么在test.go中应该能够访问到
- fmt.Println(test.StuNo)
- }
test/utils.go
- package test
-
- var StuNo int = 20034 //定义学生的学号
关键字就是程序发明者规定得有特殊含义得单词,又叫保留字。go语言中一共有25个关键字
预定义标识符:一共36个预定标识符,包含基础数据类型和系统内嵌函数·
算数运算符:+_*/%++,--
算术运算符是对数值类型得变量进行运算的,比如,加减乘除
- package main
-
- import "fmt"
-
- func main() {
- // +加号
- // 1.正数2.相加操作3.字符串拼接
- var n1 int = +10
- fmt.Println(n1)
- var n2 int = 4 + 7
- fmt.Println(n2)
- var s1 string = "abc" + "def"
- fmt.Println(s1)
-
- // / 除号
- fmt.Println(10 / 3) //两个int类型数据运算,结果一定为整数类型
- fmt.Println(10.0 / 3) //浮点类型参与运算,结果为浮点类型
-
- // %取模,等价公式
- fmt.Println(10 % 3)
- fmt.Println(-10 % 3)
- fmt.Println(10 % -3)
- fmt.Println(-10 % -3)
-
- // ++自增操作
- var a int = 10
- a++
- fmt.Println(a)
- // ++自增 加1操作,--自减 减1操作
- // go语言里,++,--操作非常简单,只能单独使用,不能参与到运算中
- // ++,--只能再变量后面,不能写在变量的前面 --a ++a都是错误的
- }
- package main
-
- import "fmt"
-
- func main() {
- var num1 int = 10
- fmt.Println(num1)
- var num2 int = (10+20)%3 + 3 - 7 //=右侧得值清楚后,再赋值给左侧
- fmt.Println(num2)
-
- var num3 int = 10
- num3 += 20
- fmt.Println(num3)
-
- // 练习:交换两个值并输出结果
- var a int = 8
- var b int = 4
- fmt.Printf("a = %v,b = %v", a, b)
- // 交换
- // 引入一个中间变量
- var t int
- t = a
- a = b
- b = t
- fmt.Printf("a = %v,b=%v", a, b)
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。