GO基本语法-上

本文介绍了Go语言的基础知识,包括变量的定义(var、短变量、批量声明)、常量定义、fmt包的println、print、printf函数,以及init和main函数的作用。此外,还详细讲解了数字类型、布尔值、字符串的操作(如len、拼接、分割等)以及数组的概念、遍历和定义。通过实例展示了变量、常量、字符串和数组的使用方法。
摘要由CSDN通过智能技术生成

3.1 变量定义方法

1、var定义变量

var 变量名 类型 = 表达式
var name string = “zhangsan”
var age int = 24

2、短变量

name := “zhangsan” //短变量只能用于声明局部变量,不能用于全局变量

3、一次定义多个变量
package main
import "fmt"

func main()  {
	var username, sex string
	username = "zhangsan"
	sex = "男"
	fmt.Println(username, sex)
}
4、批量声明变量
package main
import "fmt"
func main()  {
	var (
		a string
		b int
		c bool
	)
	a = "zhangsan"
	b = 24
	c = true
	fmt.Println(a, b, c)
}

3.2 常量定义

package main
import "fmt"

const name = "zhangsan"
func main()  {
	fmt.Println(name)
}

const同时声明多个常量时,如果省略了值则表示和上面一行的值相同。

package main
import "fmt"

const (
	n1 = "zhangsan"
	n2
	n3
)
func main()  {
	fmt.Println(n1, n2, n3)
}

3.3 fmt包

  1. println:
    • 一次输入多个值的时候println中间有空格
    • println会自动换行,print不会
  2. print:
    • 一次输入多个值的时候print中间没有空格
    • print不会自动换行
  3. printf:
    • printf是格式化输出,在很多场景下比println方便
package main
import "fmt"
func main()  {
	name := "zhangsan"
	age := 20
	fmt.Printf("%s 今年 %d 岁", name, age)
}

3.4 init函数和main函数

  1. init 函数
  2. go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性
  3. 有下面的特征:
    • init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
    • 每个包可以拥有多个init函数
    • 包的每个源文件也可以拥有多个init函数
    • 同一个包中多个init函数的执行顺序go语言没有明确的定义
    • 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
    • init函数不能被其他函数调用,而是在main函数执行之前,自动被调用
  4. main函数
// go语言程序的默认入口函数(主函数): func main()
// 函数体用{} 一对括号包裹
func main()  {
	//函数体
}

3.5 golang中关键字

var 和 const:变量和常量的声明
package 和 import: 导入
func:用于定义函数和方法
return:用于从函数返回
defer:在函数退出之前执行
go:用于并行
select:用于选择不同类型的通讯
interface:用于定义接口
struct:用于定义抽象数据类型
break、case、continue、for、fallthrough、else、if、switch、goto、default:流程控制
chan:用于channel通讯
map:用于声明map类型数据
range:用于读取slice、map、channel数据

3.6 命名规范

四、 基本数据类型

4.1 内置类型

4.2 内置函数

4.3 基本类型介绍

五、数字

5.1 数字类型

5.2 数字定义

1、定义数字类型
package main
import "fmt"

func main()  {
	var a int8 =4
	var b int32 = 4
	var c int64 = 4
	d := 4
	fmt.Printf("a: %T %v \n", a, a)
	fmt.Printf("b: %T %v \n", b, b)
	fmt.Printf("c: %T %v \n", c, c)
	fmt.Printf("d: %T %v \n", d, d)
}
/*
a: int8 4
b: int32 4
c: int64 4
d: int 4 
*/
2、reflect.TypeOf 查看数据类型
package main
import (
	"fmt"
	"reflect"
)

func main()  {
	var a int8 =4
	var b int32 = 4
	var c int64 = 4
	d := 4
	fmt.Println(reflect.TypeOf(a))
	fmt.Println(reflect.TypeOf(b))
	fmt.Println(reflect.TypeOf(c))
	fmt.Println(reflect.TypeOf(d))
}
/*a: int8 4
b: int32 4
c: int64 4
d: int 4 */
5.3 布尔值
  • Go语言中以布尔类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值。
  • 注意:
    1. 布尔类型的变量的默认值为false
    1. Go语言中不允许将整型强制转换为布尔型
    1. 布尔型无法参与数值运算,也无法与其他类型进行转换
package main
import (
	"fmt"
	"unsafe"
)

func main()  {
	var b = true
	fmt.Println(b, "占用字节:", unsafe.Sizeof(b))
}

六、字符串

6.1 字符串

1、字符串

s1 := "hello"
s2 := "你好"

2、多行字符串
package main
import "fmt"

func main()  {
	s1 := `
    第一行
	第二行
	第三行`
	fmt.Println(s1)
}
3、byte和rune
4、字符串的常见操作
len(str) //求长度
fmt.Sprintf //拼接字符串
strings.Split //分割
strings.Contains //判断是否包含
strings.HasPrefix,strings,HasSuffix //前缀/后缀判断
strings.Index(),strings.LastIndex() //子串出现的问题
stings.Join(a[]string,sep string) //join操作

6.2 字符串的常用操作

1、len(str)
package main
import "fmt"

func main()  {
	str := "this is str"
	fmt.Println(len(str))
}
2、+(拼接)
package main
import "fmt"

func main()  {
	var1 := "nihao"
	var2 := "zhangsan"
	var3 := (var1 + var2)
	fmt.Println(var3)
}
3、strings.Split()
package main
import (
	"fmt"
	"strings"
)

func main()  {
	var s string = "123-456-789"
	var arr = strings.Split(s, "-")
	fmt.Println(arr)
}
4、strings.Join()
package main
import (
	"fmt"
	"strings"
)

func main()  {
	str := "123-456-789"
	arr := strings.Split(str, "-")
	fmt.Println(arr)
    arr1 := strings.Join(arr, "*")
    fmt.Println(arr1)
}
5、单引号
package main
import "fmt"

func main()  {
	a := 'a'
	fmt.Println(a)  //97 这里输出的是a字符的ASCII值
	fmt.Printf("a的值是%c", a) // a的值是a
}

6.3 字符串遍历

1、遍历字符串
package main
import "fmt"

func main()  {
	s := "hello 张三"
	for i :=0; i < len(s); i++ {
		fmt.Printf("%v(%c)", s[i], s[i])
	}
	fmt.Println()
	for _, r := range s {
		fmt.Printf("%v=>%c ", r, r)
	}
}
2、修改字符串
  • 要修改字符串,需要先将其转换成[]rune或者[]byte,完成后再转换为string。
package main
import "fmt"

func main()  {
	s := "美国第一"
	s_rune := []rune(s)
	fmt.Println("中国" + string(s_rune[2:]))
}

6.4 转string

strconv

package main

import (
	"fmt"
	"strconv"
)

func main()  {
	// 1、int转成string
	var num1 int = 20
	s1 := strconv.Itoa(num1)
	fmt.Printf("%T, %v \n", s1, s1) // string, 20
	// 2、float转成string
    /*参数1:要转换的值
	参数2:格式化类型
	参数3:保留的小数点-1(不对小数点格式化)
	参数4:格式化的类型*/
	var num2 float64 = 20.113123
	s2 := strconv.FormatFloat(num2, 'f', 2, 64)
	fmt.Printf("%T, %v \n", s2, s2) //string, 20.11
	// 3、bool转string
	s3 := strconv.FormatBool(true)
	fmt.Printf("%T, %v \n", s3, s3)
	// 4、int64转string
	var num3 int64 = 28
	s4 := strconv.FormatInt(num3, 10) //第二个参数10为 进制
	fmt.Printf("%T, %v", s4, s4)
}

6.5 string与int转换

strconv.Itoa

package main
import (
	"fmt"
	"strconv"
)

func main()  {
	num := 100
	num1 := strconv.Itoa(num)
	fmt.Printf("%T, %v \n", num, num) // int, 100
	fmt.Printf("%T, %v \n", num1, num1) // string, 100
	num2, _ := strconv.Atoi(num1)
	fmt.Printf("%T, %v \n", num2, num2) // int, 100
}

七、数组array

7.1 数组介绍

1、array介绍
  • 数组是指一系列同一类型数据的集合。
  • 数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如int、string等
  • 一个数组包含的元素个数被称为数组的长度
  • 在Golang中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说[5]int和[10]int是两个不同的类型
  • Golang中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。
  • 和数组对应的类型是Slice(切片),Slice是可以增长和收缩的动态序列,功能也更灵活
2、数组定义

var 数组变量名 [元素数量]T

  • 比如: var a [5]int 数组的长度必须是常量,并且长度是数组类型的一部分。
  • 一旦定义,长度不能变
package main
import "fmt"

func main()  {
	var a[5]int
	var b[3]int
	b[0] =80
	b[1] =90
	b[2] =100
	fmt.Println(a)
	fmt.Println(b)
}

7.2数组的遍历

1、普通遍历数组
package main
import "fmt"

func main()  {
    // var a = [...]string {"北京", "上海", "杭州"}
    var a =[3]string {"北京", "上海", "杭州"}
	fmt.Println(a)
	for i :=0;i < len(a);i ++ {
		fmt.Println(a[i])
	}
}
2、k,v遍历数组
package main
import (
	"fmt"
)

func main()  {
	var a =[...]string{"北京", "上海", "杭州"}
	for index, value := range a	{
		fmt.Println (index, value)
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值