Golang基础入门
基础入门
1、输出、输入
输出,在运行代码时将内容在终端输出。
package main
import "fmt"
func main() {
fmt.Println("hello word !")
}
在Go中提供了多种输出的方式,Print、
Println以及Printf
- print,输出
- println,输出并在最后位置添加换行符
- printf,格式化输出,第一个参数是含占位符的字符串,后续参数则用于格式化字符串
其中输出有两种,一种为内置、一种为标准库输出
在Go的内置函数中提供了 Print
和 Println
两个函数用于做输出,但是标准库的输出是官方推荐的
输入有三种
fmt.Scan
fmt.Scanln
fmt.Scanf
fmt的标准库
fmt.Print
,输出。fmt.Println
,输出并在末尾添加换行符。fmt.Printf
,格式化的输出,第一个参数是含占位符的字符串,后续参数则用于格式化字符串。- fmt.Scan,输入
- fmt.Scanln,输入并在末尾添加换行符(比较常用)
- fmt.Scanf,格式化输入
%s,占位符用于格式化字符串
%d,占位符用于格式化整型
%f,十进制小数
%.2f,保留小数点后两位(四舍五入)
%v,引用类型(map slice channel)
%p,指针
%t,bool类型
package main
import "fmt"
func main() {
fmt.Print("山东落花生花落东山")
fmt.Print("上海自来水来自海上")
fmt.Println("******************")
fmt.Println("上海自来水来自海上")
fmt.Println("山东落花生花落东山")
}
package main
import "fmt"
func main() {
//示例1:fmt.Scan
/*
var name string
fmt.Println("请输入用户名: ")
fmt.Scan(&name)
fmt.Printf(name)
*/
//示例2:fmt.Scan
var name string
var age int
fmt.Println("请输入用户名: ")
//当使用scan时,会提示用户输入
//用户输入完成时,会得到两个值:count,err(用户输入的几个值,用户输入的错误信息)
count, err := fmt.Scan(&name, &age)
if err == nil {
fmt.Println(name, age)
} else {
fmt.Println("用户输入错误", err)
}
//特别说明:fmt.scan 要求输入两个值,必须输入两个,否则会一直等待
fmt.Println(count, err)
fmt.Printf(name, age)
}
可以看出fmt.Print就是输出的时候不加换行,fmt.Println是在输出的时候添加了换行,fmt.printf是格式化输出
2.注释
- 单行注释,
//
- 多行注释,
/* */
快捷键:选中代码 然后点击键盘的 【contrl + ?】
3. 变量
变量,其实就相当于给某个值设置一个昵称
,此昵称
代指当前值。在Go中变量声明的基本格式为:var 变量名 类型 = 值
,例如:
// 声明一个字符串类型的变量name,值为 "许宁" var name string = "许宁" // 声明一个整型类型的变量age,值为 18 var age int = 18
3.1变量简写
为了能让变量的声明更方便,Go还提供了一些生命变量的简化方式。
- 省略类型,格式为:
var 变量名 = 值
var name = "许宁" var age = 18
1 | // 在给变量赋值时已知值的类型,所以Go编译器自动可以自动检测到类型,故可简化编写 |
- 省略var关键字,格式为:
变量名 := 值
(推荐)
name := "许宁"
age := 18
注意:如果变量只声明不赋值,Go内部其实会给变量默认设置值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 。
3.2变量名要求
要求(必须遵守,否则报错)
-
变量名由字母、数字、下划线组成,且首个字符不能为数字。
-
不能使用Go内置的25个关键字
建议
- 变量的命名规则遵循骆驼命名法,即首个单词小写,每个新单词的首字母大写,例如:
numShips
和startDate
- 见名知意,通过变量名就可以知道变量所代指的值,例如:
name
、email
3.3全局和局部变量
根据变量所在位置不同,变量有全局和局部之分。
3.3.1 全局变量
特别提醒:Go中的全局变量比较特殊,如果全局变量名首字母小写,则只能被当前包中的go文件使用,外部无法使用;如果首字母大写,则任意文件都使用全局变量。
可简单理解为:首字母大写表写公有,首字母小写表示私有(当前包的go文件所有)。
3.3.2 局部变量
其中,在定义多个变量时候,可以通过因式分解的方式进行简化代码。
package main
import "fmt"
/*
var name = "许宁"
var age = 18
var gender string
*/
// 在全局使用
var (
name = "许宁"
age = 18
gender string
)
func main() {
fmt.Println(name)
fmt.Println(age)
gender = "男"
fmt.Println(gender)
// 在局部使用
var (
x1 = 123
x2 = 456
)
fmt.Println(x1)
fmt.Println(x2)
}
4.常量
不可被修改的变量。获取常量的方式也是采取“就近原则”,常量一般都是定义在全局的
例如:const age int = 9
package main
import "fmt"
const Date = 999 //定义一个全局常量
const ( //批量定义常量
pi = 3.1415926
gender = "男"
)
func main() { //定义一个变量,三种定义变量的方式,推荐使用:=的方式定义变量并赋值。
var name string = "xuning"
//var name = "xuning"
//name :="xuning"
//修改变量
name = "许宁"
fmt.Println(name)
//定义常量,也可以通过推导出什么类型,但是不支持:=的方式
const age int = 98
//const age = 98
age = 99
fmt.Println(age)
}
5.条件语句
5.1 最基本条件语句
if 条件 { 成立后,此代码块执行 }else{ 不成立,此代码块执行 }
if 条件 {
成立后,此代码块执行
}
示例:
package main
import "fmt"
func main() {
//案例1
//if true {
// fmt.Println("666") 输出的是666
//}else{
// fmt.Println("999")
//}
//案例2
//if 1 > 2 {
// fmt.Println("666")
//} else {
// fmt.Println("999") 输出的是999
//}
//案例3
//flag := false
//if flag {
// fmt.Println("条件成立")
//} else {
// fmt.Println("条件不成立") 输出的结果是:条件不成立
//}
//练习题1:用户输入姓名,判断是否正确
//var name string
//fmt.Println("请输入姓名: ")
//fmt.Scanln(&name)
//if name == "xuning" {
// fmt.Println("用户输入正确")
//} else {
// fmt.Println("用户输入错误")
//}
//练习题2:用户输入数字,判断是奇数还是偶数
//var number int
//fmt.Println("请输入数字: ")
//fmt.Scanln(&number)
//if number%2 == 0 {
// fmt.Println("输入的是偶数")
//} else {
// fmt.Println("输入的是奇数")
//}
//练习题3:判断用户和密码是否正确
//var username, password string
//fmt.Println("输入用户名: ")
//fmt.Scanln(&username)
//fmt.Println("请输入密码: ")
//fmt.Scanln(&password)
//
//if username == "xuning" && password == "xuning" {
// fmt.Println("欢迎")
//} else {
// fmt.Println("用户名和密码错误")
//}
//练习题4:输入用户名是否是VIP
//var username string
//fmt.Println("请输入用户名: ")
//fmt.Scanln(&username)
//
//if username == "xuning" || username == "许宁" {
// fmt.Println("天上人间VIP")
//} else {
// fmt.Println("DDD")
//}
}
5.2多条件判断
if 条件A{
...
}else if 条件B{
...
}else if 条件C{
...
}else{
...
}
示例:
package main
import "fmt"
func main() {
var length int
fmt.Print("请输入长度:")
fmt.Scanln(&length)
if length < 1 {
fmt.Println("不长")
} else if length < 6 {
fmt.Println("中等")
} else if length < 100 {
fmt.Println("很长")
} else {
fmt.Println("异常")
}
}
5.3嵌套
package main
import "fmt"
func main() {
fmt.Println("欢迎致电10086,1.花费相关;2.业务办理;3.人工服务")
var number int
fmt.Scanln(&number)
if number == 1 {
fmt.Println("花费服务,1.交话费;2.查询")
var n1 int
fmt.Scanln(&n1)
if n1 == 1 {
fmt.Println("交话费")
} else if n1 == 2 {
fmt.Println("查话费")
} else {
fmt.Println("输入错误")
}
} else if number == 2 {
fmt.Println("业务办理")
} else if number == 3 {
fmt.Println("人工服务")
} else {
fmt.Println("输入错误")
}
}
一般不建议嵌套太多层,一般是两三层
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步