基本数据类型
main.go DAY01
package main
import (
"fmt"
)
var (
name = "Jhou Shuai"
age = 16
sex = "female"
)
/**
* @author Jhou Shuai
* 这是一个main函数,是程序的入口
*/
func main() {
// 如果变量预定义咯。不使用,程序会报错:a declared and not used
// 变量定义,指定数据类型,如果不赋值。就默认。
/*var i int
fmt.Println("i=",i)
var num =10.1
fmt.Println("num=",num)
name := "Tom"
fmt.Println("My name is",name)*/
//一次声明多个变量
//var n1,n2,n3 int
//一次声明多个不同类型的变量
//var n1 ,name ,n3 = 100,"Tom",889
// n1 ,name ,n3 := 100,"Tom~",889
// fmt.Println(n1 ,name ,n3)
fmt.Println(name ,age ,sex)
}
main.go DAY02
package main
/*import "fmt"
import "unsafe"*/
import (
"fmt"
"unsafe"
)
func main(){
//两个字节,16位 2**
var n2 int16 = 10
fmt.Printf("类型:%T,占用的字节数:%d \n",n2,unsafe.Sizeof(n2))
var age byte = 23
fmt.Printf("类型:%T,占用的字节数:%d \n",age,unsafe.Sizeof(age))
fmt.Println("年龄",age)
// 不论字符串的len有多大,sizeof始终返回16,这是为啥,字符串不是也是不可变的吗?
// 实际上字符串类型对应一个结构体,该结构体有两个域,
// 第一个域是指向该字符串的指针,第二个域是字符串的长度,每个域占8个字节,
// 但是并不包含指针指向的字符串的内容,
// 这也就是为什么sizeof始终返回的是16
var name string = "周帅周帅周帅周帅"
fmt.Printf("类型:%T,占用的字节数:%d \n",name,unsafe.Sizeof(name))
fmt.Println("姓名",name)
}
main.go DAY03
//浮点数
package main
import (
"fmt"
)
func main(){
//float32 4个字节,float64 8个字节
//符号位+指数位+尾数位=浮点数
//说明浮点数都是有符号的
var price float32 = 2333.3
fmt.Println(price)
//尾数部分可能对视,造成精度损失。
//float64 比float32精度要准确
//需要高精度的数,则应该选择float64
var salary float32 = -123.0000901
var income float64 = -123.0000901
fmt.Println("salary:",salary,"income:",income)
var fee = 0.3
fmt.Printf("默认的浮点类型:%T \n",fee)
//科学计数法
num1 := 5.1224e2
num2 := 5.1234E2
num3 := 5.1234E-2
fmt.Println("num1:",num1,"num2:",num2,"num3:",num3)
//通常。使用float64
}
main.go DAY04
//字符
package main
import (
"fmt"
"unsafe"
)
// byte
func main(){
//字符-》对应码值-》二进制——》存储
var chr byte = 'a'
var chr0 byte = '0'
fmt.Println("chr",chr,"chr0",chr0)
//bool类型 一个字节,只能取true或false
var b = false
fmt.Println("b = ",b,"字节大小:",unsafe.Sizeof(b))
//字符串 string
var address string = "四川成都玉林品上"
fmt.Println(address)
address = "四川成都玉林品上\nloufeng"
fmt.Println(address)
//反引号 ``
str3 := `
var price float32 = 2333.3
fmt.Println(price)
//尾数部分可能对视,造成精度损失。
//float64 比float32精度要准确
//需要高精度的数,则应该选择float64
var salary float32 = -123.0000901
var income float64 = -123.0000901
fmt.Println("salary:",salary,"income:",income)
var fee = 0.3
fmt.Printf("默认的浮点类型:%T \n",fee)
//科学计数法
num1 := 5.1224e2
num2 := 5.1234E2
num3 := 5.1234E-2
fmt.Println("num1:",num1,"num2:",num2,"num3:",num3)
`
fmt.Println(str3)
//字符串拼接 需要把加号。放在上一行
var str = "hello" + " world" +
" i love you forever " + " you don't know i love you "
str += ",Lily!"
fmt.Println(str)
//在go中。数据类型都有一个默认值,没有初始化、赋值就会保留默认值或叫零值
var a int //0
var b1 float32 //0
var c float64 //0
var isok bool //false
var name string //""
//%v 表示按照变量的值输出。
fmt.Printf("a=%d , b=%f,c=%f,isok=%v,name=%v",a,b1,c,isok,name)
}
main.go DAY05
// 基本数据类型转换
package main
import (
"fmt"
"strconv"
)
func main(){
// 显示转换
var i int32 = 10
var a float64 = float64(i)
fmt.Printf("a=%v的数据类型:%T \n",a,a)
var b int8 = int8(i)
fmt.Printf("b=%v的数据类型:%T \n",b,b)
var c int64 = int64(i)
fmt.Printf("c=%v的数据类型:%T \n",c,c)
fmt.Printf("i=%v的数据类型:%T \n",i,i)
var salary int64 = 150000
var income int8 = int8(salary)
fmt.Printf("income=%v的数据类型:%T \n",income,income)
//基本数据类型转 字符串 fmt.Sprintf()
var str string
var myChar byte = 'a'
var isok bool = true
//str = fmt.Sprintf("%d",i)
str = strconv.FormatInt(c,10)
fmt.Printf("类型:%T str=%q \n",str,str)
//str = fmt.Sprintf("%f",a)
str = strconv.FormatFloat(a,'f',3,64)
fmt.Printf("类型:%T str=%q \n",str,str)
str = fmt.Sprintf("%c",myChar)
fmt.Printf("类型:%T str=%q \n",str,str)
//str = fmt.Sprintf("%t",isok)
str = strconv.FormatBool(isok)
fmt.Printf("类型:%T str=%q \n",str,str)
str = strconv.Itoa(int(c))
fmt.Printf("类型:%T str=%q \n",str,str)
}
main.go DAY06
package main
import (
"fmt"
_"strconv"
)
func main(){
var salary int64 = 12000
fmt.Println(salary)
}
main.go DAY07
//指针
package main
import (
"fmt"
)
func main() {
// 基本数据类型,在内存的布局
var i int = 10
//i的内存地址 &i
//i地址: 0xc00006a080
fmt.Println("i地址:",&i)
//
//ptr 指针变量
//ptr 的类型 *int
//ptr 本身的值 &i
var ptr *int = &i
// 0xc00006a080
fmt.Printf("ptr=%v\n",ptr)
//ptr地址: 0xc000096020
fmt.Println("ptr地址:",&ptr)
// 0xc000096020
fmt.Println("ptr指向的值",ptr)
fmt.Println("*ptr指向的值",*ptr)
}
main.go DAY08
//指针
package main
import (
"fmt"
)
func main() {
var num int = 9
fmt.Printf("num address:%v \n", &num)
var ptr *int
ptr = &num
*ptr = 10
fmt.Println("num=",num)
}
func Nine(){
for i:=1;i<=9;i++{
for j:=1;j<=i;j++{
// 格式化输出,不换行 \t==》tab
fmt.Printf("%v*%v=%v\t",i,j,i*j)
}
//输出后,换行
fmt.Println()
}
}
main.go DAY09
//string 转基本类型
package main
import (
"fmt"
"strconv"
)
func main(){
var str string = "true"
var b bool
/**
* b,_ = strconv.ParseBool(str) 函数返回两个值
* 返回bool,err 不想获得err ,就用下划线_忽略
*/
b,_ = strconv.ParseBool(str)
fmt.Printf("类型:%T str=%v \n",b,b)
var salary string = "12000"
var money int64
//返回的都是64,因此要用int64接收,如果要int 用int()转
money,_ = strconv.ParseInt(salary,10,64)
fmt.Printf("类型:%T str=%v \n",money,money)
var fee string = "5.1256"
var service float64
service,_ = strconv.ParseFloat(fee,64)
fmt.Printf("类型:%T str=%v \n",service,service)
//string 转基本类型,确保是数值型字符串 若不是数值型字符串 ,转换失败,直接设置为零。
var value string = "zhoushuai"
var val int64
val,_ = strconv.ParseInt(value,10,64)
// val = 0
fmt.Printf("类型:%T str=%v \n",val,val)
}
main.go DAY10
// Go语言·常量
package main
import (
"fmt"
)
var content string = `
————————————————Go语言·常量————————————————————
一、常量
使用const修改
常量在定义的时候,就必须初始化
常量是不能修改
常量只能修饰bool,数值类型(int float)、string类型
const 常量名(identifier) [type] = value
二、注意事项:
常量名,没有必须大写的规定
首字母大写。小写,常量的访问范围
`
/*
const (
a = iota
b = iota
c,d = iota,iota
)
0 1 2 2
*/
/*const (
a = iota
b = iota
c = iota
d = iota
)
0 1 2 3*/
const (
a = iota
b
c
d
)
// 0 1 2 3
func main() {
var num int
// 常量在定义的时候,就必须初始化,给值
const tax int = 12
fmt.Println(num, tax)
fmt.Println(a, b, c, d)
euler()
consts()
enums()
}
func euler() {
// 复数 欧拉公式
fmt.Printf("%.2f\n",cmplx.Exp(1i*math.Pi)+1)
}
func consts(){
const(
filename = "abac.txt"
a,b = 3,4
)
var c int
c = int(math.Sqrt(a*a+b*b))
fmt.Println(filename,c)
}
func enums() {
const(
cpp = iota
java
python
php
golang
)
fmt.Println(cpp,java,python,php,golang)
const(
B = 1 << (10*iota)
KB
MB
GB
TB
PB
)
fmt.Println(B,KB,MB,GB,TB,PB)
}
网友评论