Golang----“Study”
1.包管理
关于包管理的总结:
-
一个文件夹可以称为一个包。
-
在文件夹(包)中可以创建多个文件。
-
在同一个文件夹(包)下的文件中必须指定文件夹(包)名称,且名称相同。
关于包的分类:
- main包。
必须写一个main主函数,此函数就是项目的入口。编译生成的是一个可执行文件。
- 非main包。用来将代码分类的。
PS:在同一个包内的不同文件可以相互调用各自的func。例如:funcName()
PS: 如果需要调用不同包里面的func,则可以 packageName.funcName()
关于func名称首字母大小写
-
首字母大写时,可以被别的包调用。
-
首字母小写时,只可以在当前的包使用。
2.输出
-
内置函数
print
println
-
fmt包(推荐)
fmt.Println
fmt.Print
扩展:
格式化输出
// %s,占位符“文本”
// %d,占位符“整数”
// %f,占位符 小数
// %.2f 占位符 小数(保留小数点后两位,四舍五入)
package main
import "fmt"
func main(){
fmt.Println("好好%s,天天向上,奖励%d元", "学习", 100)
}
注释
// 单行注释
/* */ 多行注释
3.初识数据类型
func main() {
// 整型
fmt.Println(21)
fmt.Println(22 - 1)
// 字符串
fmt.Println("陈chenih")
fmt.Println("chen" + "ih")
// 布尔型
fmt.Println(1 > 2)
fmt.Println(2 > 1)
}
4.变量 & 常量
变量
/*
变量
var 变量名 变量类型 = "值"
*/
var username string = "夏洛特"
var age int = 21
var marry bool = false
/*
声明变量也可以先声明,再赋值
*/
var username string
username = "夏洛特"
/*
变量简写
*/
var username string = "夏洛特"
var username = "夏洛特" // go会自动辨别类型
username := "夏洛特"
/*
因式分解
*/
var (
username = "夏洛特"
age = 21
marry = false
hobby string
)
PS:变量名必须只包含:字母、数字、下划线。并且不能以数字开头。不能使用关键字命名。
如果只声明不赋值,那么string默认值为空字符串,int默认值为0,bool默认值为flase
go编译器会认为如果声明了变量,但是不使用变量,那么就会报错。
4.1 作用域
如果我们定义了一个{ },那么{ }中定义的变量
不能被上级使用。
同级可以使用。
子级可以使用。
4.2 全局变量(未写在函数中的变量)
定义全局变量时,必须使用以下三种方式:
var username string = "夏洛特"
var username = "夏洛特"
var (
username = "夏洛特"
age = 21
)
4.3 赋值及内存相关
func main() {
/*
&name : 变量name 的内存地址
*/
name := "陈佳禾"
nickname := name
fmt.Println(name, &name)
fmt.Println(nickname, &nickname)
}
虽然nickname := name,但是nickname并不是直接指向name,而是重新开辟一个内存地址,将name的值赋值过来。
PS:使用int/string/bool这三种数据类型时,如果遇到变量的赋值则会重新拷贝一份。内存地址不一样。
常量
// 定义常量
const age int = 21
常量不可以修改。常量也分局部常量和全局常量。
iota
const (
a = iota
b
c
)
// 输出:0 1 2
const (
a = iota + 1
b
c
)
// 输出: 1 2 3
const (
a = iota
_
b
c
)
// 输出:0 2 3 _代替一个值
5.输入
让用户输入数据,完成交互。
-
fmt.Scan
-
package main import "fmt" func main() { // fmt.scan var age int fmt.Println("请输入年龄:") count, err := fmt.Scan(&age) } // Scan会返回两个值,count:输入值的个数,err错误信息
-
-
fmt.Scanln
- 和Scan没什么区别,唯一区别是如果需要输入两个或两个以上的值时,Scan要等待所有数据都输入完才可以进行下一步,而Scanln可以直接跳过。
-
fmt.scanf
-
package main import "fmt" func main() { // fmt.scan var name string var age int fmt.Println("请输入用户名:") fmt.Scanf("我叫%s ,今年%d 岁", &name,&age) fmt.Println(name, age) }
-
6.条件语句
单条件判断
if 条件 {
成立后(条件判断为:true),此代码块执行
}else{
不成立条件判断为:false),此代码块执行
}
多条件判断
if 条件A {
条件判断为:true,此代码块执行
}else if 条件B {
条件判断为:true,此代码块执行
}else if 条件C {
条件判断为:true,此代码块执行
}else {
不成立条件判断为:false,此代码块执行
}