go语言中,想要输出内容到控制台,package必须是main,包括方法名也必须是main,
go语言输出的语法是 fmt 库。
package main
import "fmt"
func main() {
// go语言中 输出内容 使用的库是 fmt库
fmt.Println("Hello world")
}
Go语言的基本类型有:
boolean:布尔类型 true / false
string :字符串类型
数值型:
浮点型:
byte:等同于 uint8
主要适用于存储字符,存储的是字符的 ASCII码
rune:等同于 int32
也是用于存储字符的,存储的是字符的 ASCII码,但是比byte长度大,比如中文使用byte可能会导致存储不下,这个时候可以使用rune类型
当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 等。所有的内存在 Go 中都是经过初始化的。
package main
import "fmt"
/*
*
go语言中基本数据类型分为:
bool、字符和string、数值类型(整数:int、浮点数: float、byte字节 其实也是int、rune类型其实也是 int )
*/
func main() {
// 整数
var number1 int8
var number2 int16
var number3 int32
var number4 int64
var number5 uint8
var number6 uint16
var number7 uint32
var number8 uint64
//这个int是个 动态类型 如果操作类型是 64 那么这里就是 int64 如果操作系统是 32 那么就是 int32
//同意的道理 uint 也是
var number9 int
//浮点数
var number10 float32
var number11 float64
fmt.Println(number1)
fmt.Println(number2)
fmt.Println(number3)
fmt.Println(number4)
fmt.Println(number5)
fmt.Println(number6)
fmt.Println(number7)
fmt.Println(number8)
fmt.Println(number9)
fmt.Println(number10)
fmt.Println(number11)
// -------------------- byte 类型 就是 uint8
// 主要适用于存储字符,存储的是字符的 ASCII码
var number12 byte
number12 = 'a'
fmt.Println(number12)
// -------------------- rune 类型 就是 int32
// 也是用户存储字符的但是比byte长度大,比如中文使用byte可能会导致存储不下,这个时候可以使用rune类型
var number13 rune
number13 = '酿'
fmt.Println(number13)
// ------------------------------ 字符串类型
var name string
name = "这是一个字符串类型"
fmt.Println(name)
}
Go语言中可以不指定变量的类型,变量的类型可以让编译器来自动决定类型。
go语言中定义语法的格式是,
var修饰,变量的名称在类型的前面,和java不同。
package main
import "fmt"
// go语言中 声明方法 使用 func
func main() {
// 在 go语言中 声明 变量用 var
// 名字在前面 类型在后面
// 在 go语言中 如果声明了变量 没有给赋值的话 默认的值 就是 空串和0
// 比如在 java中 如果不给值 那么就是 null go语言中 都是有默认值的
// go语言中 如果定义了变量 不使用的话 会报错
var name1 string
var age1 int
fmt.Println("当前人的名称是", name1, "当前人的年龄是", age1)
// 定义变量 并且给变量 赋值
var name string
var age int
name = "zhangsan"
age = 18
//重新赋值
age = 19
// 直接声明变量 然后给 变量赋值
var sex = 1
fmt.Println("当前人的名字叫 ", name, "他的年龄是", age, "性别是", sex)
// 第二种定义变量的格式
var name2, age2, sex2, flage2 = "zhangsan", 18, 1, true
//对变量 重新赋值
name2 = "李四"
fmt.Println("第二种定义变量的名称是:", name2, "年龄是:", age2, "性别是:", sex2, "状态是:", flage2)
// 第三种定义变量的格式
name3 := "wangwu"
age3 := 20
//对变量重新赋值
name3 = "赵六"
fmt.Println("第三种定义变量的名称是:", name3, "年龄是:", age3)
//连续对变量进行定义
name4, age4, sex4 := "李七", 21, 1
fmt.Println("第四种定义变量的名称是:"+name4, age4, sex4)
// ---------------------------------------
}
package main
import "fmt"
// 定义全局变量 任何一个函数里面都能使用
// 第一种写法
var name5 = "libai"
var age5 = 100
// 第二种写法
var (
name6 = "chengyaojin"
age6 = 100
)
// go语言中 声明方法 使用 func
func main() {
fmt.Println(name5, age5)
fmt.Println(name6, age6)
}
常量一旦被定义,不能被修改。
package main
import "fmt"
func main() {
/**
1.常量类型只能定义 bool、数值类型(整数,浮点数,复数)、字符串
2.变量定义了不使用会报错,常量定义了可以不使用不报错
3.常量,定义的时候就指定值,不能修改
*/
// 显式定义常量值: 确定常量的类型
const success1 int = 200
// 隐式定义常量
const success2 = 200
// 常量定义 第一种方式
const (
ERROR1 = 1
ERROR2 = 2
ERROR3 = 3
)
// 第二种方式
const ERROR4 = 4
const ERROR5 = 5
// 第三种方式
// 如果定义常量时 没有给常量定义值 那么这个常量的值 将会使用 上个常量的值
const (
ERROR6 = 6
ERROR61
ERROR7 = 7
ERROR71
)
const (
code1 = "success"
code2 = true
code3 = 1
)
fmt.Println(ERROR1, ERROR2, ERROR3)
//常量 只能被初始化一次 再次初始化的话 编译报错
//ERROR4 = 10
fmt.Println(ERROR4, ERROR5)
fmt.Println(ERROR6, ERROR61, ERROR7, ERROR71)
}
假如我们针对用户表中,用户状态,需要用一个枚举类来表示他的状态,那么就go语言中,如何定义枚举呢?
package main
import "fmt"
func main() {
/**
1.iota是一个自增的数字类型
2.如果中断了iota 那么必须 显式的恢复,后续会继续递增
3.每次出现const的时候,iota的初始化都是 0
*/
// 在go语言中对状态进行枚举表示
// 未使用:0
// 正常: 1
// 已封禁:2
// 账号异常:3
// 停用:4
const (
NOTUSE = iota
NORMAL
PROHIBITED
ABNORMAL
DEACTIVATE
)
const (
state = iota
state1
state2 = "未使用"
state3
state4 = iota
)
// 假如我们的错误码 从 1000开始
const (
ERROR = 1000 + iota
ERROR1
ERROR2
ERROR3
ERROR4
)
fmt.Println(NOTUSE, NORMAL, PROHIBITED, ABNORMAL, DEACTIVATE)
fmt.Println(state, state1, state2, state3, state4)
fmt.Println(ERROR, ERROR1, ERROR2, ERROR3, ERROR4)
}
上面我们说过了,在go中如果变量不被使用的话,那么编译会报错。但是确实有些场景我们用不到这个变量。这个怎么处理?
使用匿名变量来解决。
package main
import "fmt"
// 定义一个函数 返回两个返回值
// 当前函数 返回两个返回值 类型是 int 和 bool
func anonymous() (int, bool) {
return 0, true
}
func main() {
//定义匿名变量 用 "_" 来表示 匿名变量
var _ int
//将第一个返回值用 匿名变量来接口
_, ok := anonymous()
if ok {
fmt.Println("方法返回的是true")
}
}
package main
import (
"fmt"
strconv "strconv"
)
/*
*
基本数据类型的转换
1.数值之间相互转换
1.int、float、bool 转string
2.string 转 int、float、bool
*/
func main() {
var age int8 = 12
//将age转成 uint8
var age1 = uint8(age)
//将age转成 int64
age2 := int64(age)
fmt.Println(age1)
fmt.Println(age2)
// -------------------------------- int转成 float
var number = float64(age)
fmt.Println(number)
//----------------------------------- int float 转字符串
// Itoa 函数必须转成 int类型
var number1string string
number1 := int(age)
number1string = strconv.Itoa(number1)
fmt.Println("这是字符串类型:" + number1string)
var numberFloatString string
var numberFloat float64
numberFloat = 266.141569
//转成string
//第1个参数是 要转换的类型
//第2个参数是 要转换类型显示成什么样 具体format格式 可以点进去源码看
//第3个参数 就写成 -1 就好了
//第4个参数 就写成 64就好了
numberFloatString = strconv.FormatFloat(numberFloat, 'f', -1, 64)
fmt.Println("float64转成string" + numberFloatString)
//----------------------------------- bool 转字符串
var flage = true
var flageString string
flageString = strconv.FormatBool(flage)
fmt.Println("将bool类型转成string类型:" + flageString)
//-------------------------------------------------------- 字符串转int float bool
// 1.string 转 int
var number11string = "100"
var number11 int
number11, err := strconv.Atoi(number11string)
if err != nil {
return
}
fmt.Println("string转成int类型", number11)
// 2.string 转 float
var floatstring = "3.14156"
var float1 float64
//第2个参数 就写成64
float1, err = strconv.ParseFloat(floatstring, 64)
if err != nil {
return
}
fmt.Println("string类型转成float类型", float1)
//将string转成bool
var bolstring = "false"
var bool1 bool
bool1, err = strconv.ParseBool(bolstring)
if err != nil {
return
}
fmt.Println("string类型转成bool类型", bool1)
}