Go-基础语法

目录

1 注释

 2 变量

 2.1 声明变量

2.2 变量赋值

2.3 匿名变量

2.4 GO语言中的变量名命规范

3 语句分割符

4 输入输出函数

4.1 输出函数

4.2 输入函数


1 注释

        go的注释分为单行注释和多行注释

        单行注释://内容

         

        多行注释:/*内容*/

        

 2 变量

 2.1 声明变量

# 声明变量的格式
var 变量名 变量类型

# 声明多种类型的变量
var x int
var s string
var b bool

# 声明后值类型变量会有默认值
fmt.Println(x)  // 0
fmt.Println(s)  // ""
fmt.Println(b)  // false

# 同时声明多个同样类型的变量
var x,y int

# 声明多个不同类型的变量
var (
    name string
    age int
    isMarried bool
)

2.2 变量赋值

         新变量赋值

## 先声明再赋值:不能多次声明,可以多次赋值
var x int
x = 10
fmt.Println(x)
x = 20 // 重新赋值

## 声明并赋值:
var y string= "hello world!"
var y = "hello world!" //不指定数据类型编译器会自己识别
fmt.Println(y)

## 声明并赋值精简版:
s := "hello world!"
fmt.Println(s)
// 1、编译器会自动根据右值类型推断出左值的对应类型,等同于var s = "hello world!"。
// 2、该变量之前不能声明,否则重复声明
// 3、这种声明方式只能在函数内

## 同时声明赋值多个变量
var name,age = "shuaibi",22

         将计算结果赋值给变量

var a, b = 10, 20
var c = a + b
fmt.Println(c)
var d = c + 100
fmt.Println(d)
// 也可以将两个字符串变量进行拼接再赋值

        将一个变量赋值给另一个变量

var a = 100
var b = a // 变量之间的赋值是值拷贝:将同样的值赋值给其他变量,新开辟一块内存空间,不是一个内存地址,两个变量之间的修改不会互相影响
fmt.Println(a, b)
a = 200
fmt.Println(b)

2.3 匿名变量

           匿名变量即没有命名的变量,在使用多重赋值时,如果想要忽略某个值,可以使用,通过一个_下划线表示

var _, b = 1, 2  
fmt.Println(b)
// 匿名函数常用于调用函数后将某个返回值抛弃,不进行接受和二次使用时,就可以使用

2.4 GO语言中的变量名命规范

            变量名需要遵循规范,不然编译时会报错

1、变量名称必须由数字、字母、下划线组成。

2、标识符开头不能是数字。

3、标识符不能是保留字和关键字。

4、建议使用驼峰式命名,当名字有几个单词组成的时优先使用大小写分隔

5、变量名尽量做到见名知意。

6、变量命名区分大小写

             自定义变量时不可以使用关键字

break        default          func           interface         select
case         defer            go             map               struct
chan         else             goto           package           switch
const        fallthrough      if             range             type
continue     for              import         return            var
// 关键字是已经有特殊含义和功能的单词,不可以用作自定义变量名字

                预定义的名字用于内建的常量、类型和函数,也不可使用

// 内建常量:
    true false iota nil
// 内建数据类型:
    int int8 int16 int32 int64
    uint uint8 uint16 uint32 uint64 uintptr
    float32 float64 complex128 complex64
    bool byte rune string error
// 内建功能函数:
    make len cap new append copy close delete
    complex real imag
    panic recover

3 语句分割符

程序中让编译器和解释器识别断句通过换行,一行一个语句,不需要像c一样写分号

// 推荐写法
var name = "yuan"  // 换行即分隔符
var age = 18
fmt.Println(name)
fmt.Println(age)

// var name = "yuan";var age = 18    // 不报错但是不推荐

4 输入输出函数

4.1 输出函数

fmt.Print`有几个变种:

Print:   输出到控制台,不接受任何格式化操作
Println: 输出到控制台并换行
Printf : 只可以打印出格式化的字符串,只可以直接输出字符串类型的变量(不可以输出别的类型)
Sprintf:格式化并返回一个字符串而不带任何输出

        print和println

// println打印后会同时换行
fmt.Println("hello world")

// print打印后会同时换行
fmt.Print("hello world")

        printf

// 在打印时通过占位符将变量和字符串进行拼接打印,不同类型的变量有不同的占位符

fmt.Printf("姓名:%s 年龄:%d 婚否:%t 薪资:%.2f\n", name, age, isMarried, salary)
fmt.Printf("姓名:%v 年龄:%v 婚否:%v 薪资:%v\n", name, age, isMarried, salary)
fmt.Printf("姓名:%#v 年龄:%#v 婚否:%#v 薪资:%#v\n", name, age, isMarried, salary)

// 占位符:

`%v`:以默认的方式打印变量的值                              
`%#v`:相应值的Go语法表示                                   
`%T`:打印对应值的类型                                      
`%+d` :带符号的整型,`%d` 不带符号的整型                    
`%o` :不带零的八进制,`%#o` 带零的八进制                    
`%x` :小写的十六进制,`%X` 大写的十六进制,`%#x` 带0x的十六进制 
`%b` :打印整型的二进制                                      
`%t` :打印true 或 false                                     
`%s `:输出字符串表示,`%-5s` 最小宽度为5(左对齐)          
`%f` 小数点而无指数,默认精度为6                             
`%e`  科学计数法,如-1234.456e+78                            
`%p` 带0x的指针,`%#p` 不带0x的指针  

// 通过占位符格式化整形和浮点型
fmt.Printf("%b\n", 12)  // 二进制表示:1100
fmt.Printf("%d\n", 12)  // 十进制表示:12
fmt.Printf("%o\n", 12)  // 八进制表示:14
fmt.Printf("%x\n", 12)  // 十六进制表示:c
fmt.Printf("%X\n", 12)  // 十六进制表示:c
fmt.Printf("%f\n", 3.1415)  // 有小数点而无指数:3.141500
fmt.Printf("%.3f\n", 3.1415)  // 3.142
fmt.Printf("%e\n", 1000.25)  // 科学计数法:  1.000250e+03,默认精度为6

// 设置宽度
fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1001", "alvin", 100)
fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1002", "zuibangdeyuanlaoshi", 98)
fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1003", "x", 78)

        Sprintf

// Printf和Sprintf都是替换字符串,Printf是直接输出到终端,Sprintf是不直接输出到终端,而是返回该字符串,相当于return

info := fmt.Sprintf("姓名:%s 年龄:%d 婚否:%t 薪资:%.2f\n", name, age, isMarried, salary)
fmt.Println(info)

4.2 输入函数

go语言fmt包下有三个函数,可以在程序运行过程中从标准输入获取用户的输入

        fmt.scan

## 函数源码语法:接受一个不定长的接口类型的参数,返回两个值
func Scan(a ...interface{}) (n int, err error)

## Scan 从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。

package main

import "fmt"

func main() {
	var (
		name      string
		age       int
		isMarried bool
	)
	fmt.Scan(&name, &age, &isMarried) // 输入类型不一致,按默认值,需用&符表示要将获取的数据赋值给对应的变量
	fmt.Printf("扫描结果 name:%s age:%d married:%t\t", name, age, isMarried)
}

        fmt.scanf

## 函数源码语法:接受两个参数,返回两个值
func Scanf(format string, a ...interface{})(n int, err error)

## Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。本函数返回成功扫描的数据个数和遇到的任何错误。

package main

import "fmt"

func main() {
	var (
		name      string
		age       int
		isMarried bool
	)
	fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &isMarried)
	fmt.Printf("扫描结果 姓名:%s 年龄:%d 婚否:%t", name, age, isMarried)

}

// 输入内容:输入的内容要符合规定的数据类型,并且以空格分隔
1:liduole 2:23 3:true
扫描结果 姓名:liduole 年龄:23 婚否:true


## 例如需要做个计算器,需要将两个关键数据用变量接收,还需要其他内容补充
var a, b int
fmt.Scanf("%d+%d", &a, &b)
fmt.Println(a + b)

        fmt.scanln

## 函数源码语法:接受一个不定长的接口类型的参数,返回两个值
func Scanln(a ...interface{}) (n int, err error)

## Scanln类似于Scan,它遇到换行立即停止扫描。本函数返回成功扫描的数据个数和遇到的任何错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 变量和常量声明 Go语言中,使用var关键字声明变量,常量使用const关键字声明。 ``` var name string = "Tom" var age int = 18 const pi = 3.14 ``` 2. 数据类型 Go语言中,基本数据类型包括整型、浮点型、布尔型、字符串型等。 ``` var num int = 10 var f float64 = 3.14 var flag bool = true var str string = "hello world" ``` 3. 控制语句 Go语言中,支持if、for、switch等控制语句。 ``` if num > 0 { fmt.Println("positive") } else { fmt.Println("negative") } for i := 0; i < 10; i++ { fmt.Println(i) } switch num { case 1: fmt.Println("one") case 2: fmt.Println("two") default: fmt.Println("others") } ``` 4. 函数 Go语言中,使用func关键字定义函数。 ``` func add(a, b int) int { return a + b } result := add(1, 2) fmt.Println(result) ``` 5. 包和导入 Go语言中,使用package关键字定义包,使用import关键字导入包。 ``` package main import "fmt" func main() { fmt.Println("hello world") } ``` 6. 结构体和方法 Go语言中,使用type关键字定义自定义结构体,可以给结构体定义方法。 ``` type Person struct { name string age int } func (p Person) sayHello() { fmt.Println("hello, my name is", p.name) } p1 := Person{name: "Tom", age: 18} p1.sayHello() ``` 7. 指针 Go语言中,使用&符号获取变量的地址,使用*符号获取指针指向的值。 ``` num := 10 ptr := &num fmt.Println(*ptr) ``` 8. 数组和切片 Go语言中,使用[]定义数组和切片,数组长度固定,切片长度可变。 ``` arr := [3]int{1, 2, 3} slice := []int{1, 2, 3} ``` 9. map Go语言中,使用map关键字定义map。 ``` m := make(map[string]int) m["one"] = 1 m["two"] = 2 fmt.Println(m["one"]) ``` 10. 接口 Go语言中,使用interface关键字定义接口,一个类型只要实现了接口中定义的所有方法,就可以被认为是实现了该接口。 ``` type Shape interface { area() float64 } type Rectangle struct { width float64 height float64 } func (r Rectangle) area() float64 { return r.width * r.height } r := Rectangle{width: 10, height: 5} var s Shape = r fmt.Println(s.area()) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值