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
// 在给变量赋值时已知值的类型,所以Go编译器自动可以自动检测到类型,故可简化编写
  • 省略var关键字,格式为:变量名 := 值 (推荐)
name := "许宁"
age := 18

  注意:如果变量只声明不赋值,Go内部其实会给变量默认设置值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 。

3.2变量名要求

要求(必须遵守,否则报错)

  • 变量名由字母、数字、下划线组成,且首个字符不能为数字。

  • 不能使用Go内置的25个关键字

建议

  • 变量的命名规则遵循骆驼命名法,即首个单词小写,每个新单词的首字母大写,例如:numShips 和 startDate
  • 见名知意,通过变量名就可以知道变量所代指的值,例如:nameemail

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("输入错误")
    }

}

一般不建议嵌套太多层,一般是两三层

 

 

 

 

 

 

 

 

  

 

posted @ 2022-08-21 22:30  XU-NING  阅读(144)  评论(0)    收藏  举报