江苏城乡建设部网站首页,网站做啥内容用户多,沈阳网站建设推广服务,在上海卖商铺做哪个网站好欢迎来到Golang的世界#xff01;在当今快节奏的软件开发领域#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面#xff0c;Golang#xff08;又称Go#xff09;无疑是一个备受瞩目的选择。在本文中#xff0c;带领您探索Golang的世界#xff0c;一步步地了… 欢迎来到Golang的世界在当今快节奏的软件开发领域选择一种高效、简洁的编程语言至关重要。而在这方面Golang又称Go无疑是一个备受瞩目的选择。在本文中带领您探索Golang的世界一步步地了解这门语言的基础知识和实用技巧。 目录
变量的概念
数据类型的概念
数据类型转换
基本数据类型指针
标识符的概念 变量的概念
一个程序就是一个世界不论是使用哪种高级程序语言编写程序变量都是其程序的基本组成单位相当于内存中一个数据存储空间的表示以下是go定义变量并使用的基本方式
package main
import fmt
func main() {// 1.声明变量var age int// 2.变量赋值age 18// 3.使用变量fmt.Println(age , age)// 声明和赋值可以合并成一句var age2 int 20fmt.Println(age2 , age2)
}
上面这种显然易见控制台打印 age18 和 age2 20接下来总结一下变量的使用方式
package main
import fmt
func main() {// 第一种方式指定变量的类型并赋值var num int 18fmt.Println(num)// 第二种方式指定变量的类型但是不赋值使用默认值var num2 intfmt.Println(num2)// 第三种方式如果没有写变量的类型会根据等号后面的值进行判断变量的类型自动判断var num3 tomfmt.Println(num3)// 第四种方式省略var注意 : 不能写为 sex : 男fmt.Println(sex)
}
最终控制台打印的效果如下所示 声明在函数内部的是局部变量如果想声明全局变量可以将变量写在函数外面如下
package main
import fmt
// 单个全局变量
var n 100
var m 10.0
// 一次性声明全局变量
var (n1 12n2 15
)
func main() {fmt.Println(n, m, n1, n2) // 100 10 12 15
}
数据类型的概念
数据类型是编程中用来区分数据存储方式、操作方式以及数据的范围和限制的一种分类方式。它定义了数据的种类以及对这些种类数据进行的操作如下图所示展示golang的数据类型的分类 上述数据类型中字符类型有特殊的转义字符这里简单的讲解一下
转义符含义Unicode值\b退格(backspace)\u0008\n换行\u000a\r回车\u000d\t制表符(tab)\u0009\双引号\u0022\单引号\u0027\\反斜杠\u005c
接下来对这些转义字符进行一个简单的测试
package main
import fmt
func main() {// 转义字符// \n 换行fmt.Println(aaa\nbbb)// \b 退格fmt.Println(aaa\bbbb)// \r 光标回到本行的开头后续输入会替换原有字符fmt.Println(aaa\rbbb)// \t 制表符 以8个距离为单位fmt.Println(aaa\tbbb)fmt.Println(aaaaa\tbbb)// \fmt.Println(\aaa\)// \v 垂直制表符fmt.Println(aaa\vbbb)// \f 换页符fmt.Println(aaa\fbbb)// \a 响铃fmt.Println(aaa\abbb)// \000 空字符fmt.Println(aaa\000bbb)// \xhh 十六进制fmt.Println(aaa\x01bbb)// \uhhhh 十六进制fmt.Println(aaa\u01bbb)
}
上面代码执行最终达到的效果如下 数据类型转换
go在不同类型的变量之间赋值时需要显式转换并且只有显式转换(强制转换)代码如下
package main
import fmt
func main() {// 进行类型转换var n1 int 100//var n2 float32 n1 在这里自动转换不好使比如显式转换fmt.Println(n1) // 100var n2 float32 float32(n1)fmt.Println(n2) // 100// 注意n1的类型其实还是int类型只是将n1的值100转为float32类型n1还是int类型fmt.Printf(%T, n1) // intfmt.Println()// 将int64类型转为int8的时候编译不会出错但是会数据溢出var n3 int64 888888var n4 int8 int8(n3)fmt.Println(n4) // 56var n5 int32 12var n6 int64 int64(n5) 30 // 一定要匹配 左右的数据类型fmt.Println(n5) // 12fmt.Println(n6) // 42var n7 int64 12var n8 int8 int8(n7) 127 //编译通过但是结果可能会溢出//var n9 int8 int8(n7) 128 //编译不会通过fmt.Println(n8) // -117//fmt.Println(n9) // -128
}
基本数据类型转换为string 在程序开发中我们经常需要用到基本数据类型转换成string类型或者将string类型转换成基本数据类型接下来我们开始讲解两者之间的转换方式这里我们先介绍一下整数常用的代替字符 接下来我们通过 fmt.Sprintf(%参数, 表达式) 的方式进行字符串的转换代码如下
package main
import fmt
func main() {var n1 int 10var n2 float32 4.78var n3 bool falsevar n4 byte avar s1 string fmt.Sprintf(%d, n1)fmt.Printf(s1对应的类型是%Ts1 %q \n, s1, s1)var s2 string fmt.Sprintf(%f, n2)fmt.Printf(s2对应的类型是%Ts2 %q \n, s2, s2)var s3 string fmt.Sprintf(%t, n3)fmt.Printf(s3对应的类型是%Ts3 %q \n, s3, s3)var s4 string fmt.Sprintf(%c, n4)fmt.Printf(s4对应的类型是%Ts4 %q \n, s4, s4)
}
最终达到的效果如下 接下来我们通过 strconv包的函数的方式进行字符串的转换代码如下
package main
import (fmtstrconv
)
func main() {var n1 int 18// 第一个参数必须转为int64类型第二个参数指定字面值的进制形式为十进制var s1 string strconv.FormatInt(int64(n1), 10)fmt.Printf(s1对应的类型是%Ts1 %q \n, s1, s1)var n2 float64 4.79// 第二个参数f (-ddd.ddd) 第三个参数9 保留小数点后面9位 第四个参数表示这个小数是float64类型var s2 string strconv.FormatFloat(n2, f, 9, 64)fmt.Printf(s2对应的类型是%Ts2 %q \n, s2, s2)var n3 bool truevar s3 string strconv.FormatBool(n3)fmt.Printf(s3对应的类型是%Ts3 %q \n, s3, s3)
}
最终达到的效果如下 string转基本数据类型接下来我们开始学习如何将上面讲解的类型转换互换过来如下
package main
import (fmtstrconv
)
func main() {// string -- boolvar s1 string truevar b bool/*ParseBool这个函数的返回值有两个(value bool, err error)value就是我们得到的布尔类型的数据err出现的错误我们只关注得到的布尔类型的数据err可以用 _ 直接忽略*/b, _ strconv.ParseBool(s1)fmt.Printf(b的类型是%T, b %v \n, b, b)// string -- int64var s2 string 20var num1 int64num1, _ strconv.ParseInt(s2, 10, 64)fmt.Printf(num1的类型是%T, num1 %v \n, num1, num1)// string -- float32/float64var s3 string 3.14var f1 float64f1, _ strconv.ParseFloat(s3, 64)fmt.Printf(f1的类型是%T, f1 %v, f1, f1)
}
最终达到的效果如下 注意string向基本数据类型转换的时候一定要确保string类型能够转成有效的数据类型否则最后得到的结果就是按照对应的类型的默认值输出
package main
import (fmtstrconv
)
func main() {// string -- boolvar s1 string golangvar b boolb, _ strconv.ParseBool(s1)fmt.Printf(b的类型是%T, b %v \n, b, b)// string -- int64var s2 string golangvar num1 int64num1, _ strconv.ParseInt(s2, 10, 64)fmt.Printf(num1的类型是%T, num1 %v \n, num1, num1)
}
最终达到的效果如下 基本数据类型指针
在Go语言中指针是一个表示内存地址的值。它指向存储在内存中的变量或者数据结构的位置。
通过指针我们可以在函数之间共享数据以及在函数内部修改外部变量的值。在Go语言中我们使用符号来获取变量的内存地址使用*符号来访问指针所指向的变量的值。
package main
import fmt
func main() {var age int 18// 符号 变量 就可以获取这个变量的内存的地址fmt.Println(age) //0xc00001a088/*ptr 指针变量的名字ptr 对应的类型是*int 是一个指针类型可以理解位 指向int类型的指针age 就是一个地址是ptr变量的具体的值*/var ptr *int agefmt.Println(ptr)fmt.Println(ptr本身这个存储空间的地址为, ptr)// 想获取ptr这个指针或者这个地址指向的那个数据fmt.Printf(ptr指向的数据值为%v, *ptr) // ptr指向的数值为18
} 总结指针中最重要的两个符号是 取内存地址* 根据地址取值当然指针还可以进行如下的操作 通过指针改变指向值代码如下
package main
import fmt
func main() {var num int 10fmt.Println(num) // 10// 注意指针接收的一定是地址值所以要对num进行取地址num如果直接赋值num则会报错var ptr *int num *ptr 20fmt.Println(num) // 20
}
标识符的概念
在Go语言中标识符identifier就是指程序员自己定义的变量、常量、函数、类型等命名实体的名称。标识符可以包含字母、数字和下划线_但是必须以字母或下划线开头不能以数字开头。
在Go语言中是可以使用汉字作为变量名的但是并不推荐这样做。虽然Go语言支持Unicode字符作为标识符的一部分包括汉字但是通常不建议在代码中使用非ASCII字符作为标识符包括汉字。虽然Go语言允许使用汉字作为变量名但是出于代码可读性、可维护性以及跨平台兼容性考虑建议仍然使用英文单词或者符合ASCII字符集的命名方式。如下演示一下
package main
import fmt
func main() {var 年龄 int 10fmt.Println(年龄) // 10
} 起名规则 1包名尽量保持package的名字和目录保持一致采取有意义的包名简短有意义不要和标准库冲突。举例main包是一个程序的入口包所以main函数它所在的包建议定义为main包如果不定义为main包那么就不能得到可执行文件。 2变量名、函数名、常量名等尽量采用驼峰命名法。 3如果变量名、函数名、常量名首字母大写则可以被其他的包访问如果首字母小写则只能在本包中使用利用首字母大写小写完成权限控制 注意如果导包失败需要在文件夹里运行下面的命令生成mod文件 go mod init (study)根路径名称 控制打印如下的效果可以看到我们导包之后是拿到了对应的数值的 在go语言中关键字就是程序发明者规定的有特殊含义的单词又叫保留字go语言中一共有25个关键字如下 一共有36个预定义标识符包含基础数据类型和系统内嵌函数