社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
细节:
demo
package main//把这个test.go 归属到main
import "fmt"//引入一个包fmt
func main(){
//输出hello
fmt.PrintIn("hello")
}
安装相关
C:Userscare>cd D:gobin
D:gobin>go version
go version go1.12.5 windows/amd64
但是移到其他位置
D:go>go version
'go' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
需要配置环境变量:在环境变量中
GOPATH
D:goproject
GOROOT
D:go
path
D:gobin
再次测试:go version
第一个demo:hello.go
package main
import "fmt"
func main(){
fmt.PrintIn("hello world")
}
正确
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
问题: fmt.Println
在go build编译后,如果无报错会生成一个hello.exe文件
D:goprojectsrcgo_codeproject01main>go build hello.go
D:goprojectsrcgo_codeproject01main>hello.exe
hello, world
D:goprojectsrcgo_codeproject01main>go run hello.go
hello, world
.go文件
通过 go build
编译成 .exe
可执行文件,再运行得到结果.go文件
通过 go run
编译运行一步得到结果编译成可执行文件,在非go环境下也可以执行。
t
表示一个制表符n
换行符\
一个"
一个”r
回车实例:
package main
import "fmt"
func main(){
fmt.Println("张森森t没有什么能够打倒你,除非你不想赢")
fmt.Println("张森森n没有什么能够打倒你,除非你不想赢")
fmt.Println("张森森\没有什么能够打倒你,除非你不想赢")
fmt.Println("张森森"没有什么能够打倒你,除非你不想赢")
fmt.Println("张森森,没有什么能够打倒你,除非你不想r北木")
}
效果
D:goprojectsrcgo_codeproject01main>go run hi.go
张森森 没有什么能够打倒你,除非你不想赢
张森森
没有什么能够打倒你,除非你不想赢
张森森没有什么能够打倒你,除非你不想赢
张森森"没有什么能够打倒你,除非你不想赢
北木森,没有什么能够打倒你,除非你不想
作业
D:goprojectsrcgo_codeproject01main>go run test01.go
姓名 年龄 籍贯 住址
john 12 河北 北京
代码
package main
import "fmt"
func main(){
fmt.Println("姓名t年龄t籍贯t住址njohnt12t河北t北京")
}
var num = 2 + 3 * 5
)举例:
```
package main
import "fmt"
func main() {
// fmt.Println("张三t没有什么能够打倒你,除非你不想赢")
// fmt.Println("张三n没有什么能够打倒你,除非你不想赢")
// fmt.Println("张三\没有什么能够打倒你,除非你不想赢")
// fmt.Println("张三"没有什么能够打倒你,除非你不想赢")
// fmt.Println("张三,没有什么能够打倒你,除非你不想r北木")
// var num = 2 + 3*5
fmt.Println("张三,没有什么能够打倒你,没有什么能够打倒你,没有什么能够",
"打倒你,没有什么能够打倒你,没有什么能够打倒你,没有什么能够打倒你,没有什么",
"能够打倒你,没有什么能够打倒你,没有什么能够打倒你,没有什么能够打倒你,没有什",
"么能够打倒你,除非你不想r北木")
}
```
D:>dir
C:Userscare>d:
d:goproject>cd src
C:Userscare>cd D:goproject>src
d:goprojectsrc>cd ..
cd
d:goproject>md test01
d:goproject>md test04 test05
rd test01
d:goproject>rd /q/s test01
d:goproject>rd /s test01
新建或追加内容到文件d:goproject>echo hello > d:goprojecttest01abc.text
复制或者移动文件
复制d:goprojecttest01>copy abc.text d:goprojecttest02
复制重命名d:goprojecttest01>copy abc.text d:goprojecttest031213.text
移动d:goprojecttest01>move abc.text f:
删除文件
d:goprojecttest02>del abc.text
d:goprojecttest03>del *.text
清屏 cls
退出 exit
新建文件 cd.>123.test
package main
import "fmt"
func main(){
var i int//不赋值默认是0
fmt.Println("i=",i)
var n = 10//(可以忽略类型)
fmt.Println("n=",n)
g := "cate"//等价var g string g = “cate”
fmt.Println("g=",g)
}
注意事项:
var
,用:=
,已经声明过的变量不能再重新声明package main
import "fmt"
func main(){
var i int//不赋值默认是0
fmt.Println("i=",i)
var n = 10
fmt.Println("n=",n)
g := "cate"//等价var g string g = “cate”
fmt.Println("g=",g)
var n1, n2, n3 int//多变量声明1
var name, age, sex = "care",18,"男"//多变量声明2
a1,a2,a3 := 1,2,"care"//多变量声明3
fmt.Println("n1=",n1, "n2=",n2,"n3=",n3);
fmt.Println("name=",name, "age=",age,"sex=",sex);
fmt.Println("a1=",a1, "a2=",a2,"a3=",a3);
}
全局变量:在函数外部的变量
两种方式:
package main
import "fmt"
// var a1 = 1
// var a2 = "care"
// var a3 = 12
var (
a1 = 2
a2 = "pony"
a3 = 12
)
func main(){
fmt.Println("a1=",a1,"a2=",a2,"a3=",a3)
}
package main
import "fmt"
func main(){
i := 1
//var i int = 1
i := 1.1//报错
fmt.Println("i=",i)
}
package main
import "fmt"
func main(){
var i int = 1
// i := 1
// i := 1.1//报错
fmt.Println("i=",i)
i := 12//错误
var i int = 12//错误
}
package main
import "fmt"
func main(){
// var a = 1;
// var b = 2;
// var c = a + b //3
var a = "1";
var b = "2";
var c = a + b
fmt.Println("c=",c)//12
}
8位一个字节,int8,一个字节
说明: int8 :8位,第一位表示正负,0是正,1是负。所以正数2的7次方-1
var n int8 = -129
fmt.Println("n=",n)
报错constant -129 overflows int8
说明:全是0,表示0,全是1,2的8次方,减去全是0,255(0~2的8次方-1)
// import "fmt"
// import "unsafe"
import (
"fmt"
"unsafe"
)
//查看类型 默认是int
var n = 100;
fmt.Printf("n的类型%T",n) //n的类型int
//如何在程序中查看某个变量的字节大小和数据类型
var a = 10
//unsafe.Sizeof 是 unsafe包的一个函数,可以返回n1变量占用的字节数(import “unsafe”)
fmt.Printf("a的类型%T a占用的字节数是 %d",a,unsafe.Sizeof(a))
1、基本介绍:
小数类型就是用于存放小数
2、浮点型的分类
说明:
1. 浮点数在机器中存放形式:浮点数=符号位+指数位+尾数位(浮点数都是有符号的)
var num1 float32 = -123.0000901
var num2 float64 = -123.0000901
fmt.Println("num1= ",num1, "num2= ",num2)
//num1= -123.00009 num2= -123.0000901
浮点型使用细节:
Golong中的浮点型有固定的范围和字段长度,不受具体OS(操作系统)的影响
Golong中浮点型默认声明是float64,float64精度比float32高
浮点型常量有两种表现形式
十进制形式 5.12 、0.512(可缩写陈.512
,必须有小数点)
科学计数法形式:
5.1234e2 = 5.12*10的2次方,
5.1234E2 = 5.12*10的2次方,
5.12E-2=5.12/10的2次方,
通常情况下应该使用float64位,精度高
num3 := 5.1234e2
num4 := 5.1234E2
num5 := 5.1234e-2
fmt.Println("num3= ",num3, "num4= ",num4,"num5= ",num5)
//num1= 512.34 num2= 512.34 num5= 0.051234
1、基本介绍
Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的,他就是说对于传统的字符串是由字符组成的,而go的字符串不同,它是由字节组成的。
2、案例演示
package main
import "fmt"
func main(){
var c1 byte = 'a'
var c2 byte = '0'//字符的0
//但我们直接输出byte值,就是输出它对应的字符的码值
fmt.Println("c1=",c1)//97
fmt.Println("c2=",c2)//48
//如果我们希望输出对应字符,需要使用格式化输出
fmt.Printf("c1=%c c2=%c",c1 ,c2)
// var c3 byte = "北"//cannot use "北" (type string) as type byte in assignment
var c3 int = '北'
fmt.Printf("c3=%c c3对应码值%d",c3,c3)
}
注意赋值的时候,是单引号,格式化字符是%c,类型是%t,数字是%d
http://www.mytju.com/classcode/tools/encode_utf8.asp
英文字母-1 个字节 汉字-3 个字节
.
//字符可以运算,直接赋值某个变量一个数字,然后格式化输出会输出该数字对应的Unicode码值
var c4 int = 22269
fmt.Printf("c4=%cn",c4)//国
var n1 = 10 +'a'//10+97 = 107
fmt.Println("n1=",n1)//48
读取:二进制----> 码值 ----> 字符 --> 读取
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用UTF-8 编码标识Unicode 文本
package main
import "fmt"
func main(){
var address string = "北京欢迎你 hello go 123"
var address string = 'sads北京是你的'
//.string.go:5:6: cannot use 'u0000' (type rune) as type string in assignment
//.string.go:5:23: invalid character literal (more than one character)
var name = `n func`//反引号
fmt.Println(address);
//字符串拼接
var str = "hello" + "world"
str += "go"
fmt.Println(str)
}
整型 0
浮点型 0
字符串 “”
布尔类型 false
var a int
var b float32
var c float64
var isMale bool
var name string
//%v 按照变量的原值输出 fmt.Printf("a=%d,b=%f,c=%f,isMale=%v,name=%v",a,b,c,isMale,name)
Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Golang 中数据类型不能自动转换。
package main
import "fmt"
func main(){
var i int32 = 100
var n1 float32 = float32(i)
var n2 int8 = int8(i)
var n3 int64 = int64(i)
fmt.Printf("i=%v n1=%v n2=%v n3=%v",i ,n1, n2 ,n3 )
}
//i=100 n1=100 n2=100 n3=100
var num1 int64 = 999999
var num2 int8 = int8(num1)
fmt.Println("num2=",num2)
//num2 = 63 被溢出处理
var n1 int32 =12
var n2 int64
var n3 int8
n2 = n1 + 20
n3 = n1 + 20
//.change.go:16:5: cannot use n1 + 20 (type int32) as type int64 in assignment
//.change.go:17:5: cannot use n1 + 20 (type int32) as type int8 in assignment
n2 = int64(n1) + 20
n3 = int8(n1) + 20
var n1 int32 =12
var n2 int8
// var n3 int8
n2 = int8(n1) + 127//编译通过,但是结果不是139,被溢出处理 -117
// n3 = int8(n1) + 128//编译不通过 constant 128 overflows int8
fmt.Println(n2)
var num1 int = 99
var num2 float64 = 23.456
var b bool = true
var myChar byte = 'h'
var str string
str = fmt.Sprintf("%d",num1);
fmt.Printf("str type %T str=%vn",str ,str) //str type string str=99
str = fmt.Sprintf("%f",num2);
fmt.Printf("str type %T str=%vn",str ,str)//str type string str=23.456000
str = fmt.Sprintf("%t",b);
fmt.Printf("str type %T str=%vn",str ,str)//str type string str=true
fmt.Printf("str type %T str=%qn",str ,str)//str type string str="true"
str = fmt.Sprintf("%c",myChar);
fmt.Printf("str type %T str=%qn",str ,str)
//str type string str=99
//str type string str=23.456000
//str type string str=true
//str type string str="true"
//str type string str="h"
第二种方式转:
var num3 int = 99
var num4 float64 = 23.456
var b2 bool = true
var str string
str = strconv.FormatInt(int64(num3),10)
fmt.Printf("str type %T str=%qn",str,str)
//说明:“f”格式 10:保留10位小数,64:float64
str = strconv.FormatFloat(num4,'f',10,64)
fmt.Printf("str type %T str=%qn",str ,str)
str = strconv.FormatBool(b2)
fmt.Printf("str type %T str=%qn",str ,str)
//strconv包中有一个函数Itoa
var num5 = 4567
str = strconv.Itoa(num5)
fmt.Printf("str type %T str=%qn",str,str)
var num6 int64 = 4567
str = strconv.Itoa(int(num6))
fmt.Printf("str type %T str=%qn",str,str)
//str type string str="99"
//str type string str="23.4560000000"
//str type string str="true"
//str type string str="4567"
var str string = "true"
var b bool
// b, _ = strconv.ParseBool(str)
// 说明
// 1. strconv.ParseBool(str) 函数会返回两个值 (value bool, err error)
// 2. 因为我只想获取到 value bool ,不想获取 err 所以我使用_忽略
b , _ = strconv.ParseBool(str)
fmt.Printf("b type %T b=%vn", b, b)
var str2 string = "1234590"
var n1 int64
var n2 int
n1, _ = strconv.ParseInt(str2, 10, 64)
n2 = int(n1)
fmt.Printf("n1 type %T n1=%vn", n1, n1)
fmt.Printf("n2 type %T n2=%vn", n2, n2)
var str3 string = "123.456"
var f1 float64
f1, _ = strconv.ParseFloat(str3, 64)
fmt.Printf("f1 type %T f1=%vn", f1, f1)
//注意:
var str4 string = "hello"
var n3 int64 = 11
n3, _ = strconv.ParseInt(str4, 10, 64)
fmt.Printf("n3 type %T n3=%vn", n3, n3)
b type bool b=true
n1 type int64 n1=1234590
n2 type int n2=1234590
f1 type float64 f1=123.456
n3 type int64 n3=0
说明:如果把字符串“hello”强制转成int,会返回默认值0,float成0,bool成false
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!