go语言的学习
typora
https://blog.youkuaiyun.com/qq_41648756/article/details/81057290
一、day01
linux 下执行
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build
//切回window
SET GOOS=windows
go build
//编译后放到bin目录下
go install
1.变量声明:
package main
import "fmt"
var nWher = "test my "
//定义二个返回值
func foo()(string,int) {
return "alx",9000
}
func main() {
//声明必须要使用
var name string
var age int
//批量声明 必须要使用
var(
a string
b int
c bool
d string
)
a = "ab"
b = 12
c = false
d = "cd";
fmt.Print(name)
fmt.Print(age)
fmt.Print(a,b,c,d)
//变量声明赋值
var x string = "old boy"
var y int = 12
fmt.Printf("%s %d我爱你中国 \n",x,y)
//类型推导
var nCount = 600
var z = true
fmt.Printf("%d %d love \n",nCount,z)
fmt.Println("hello world !")
//函数内 变量声明
nazha := "嘿嘿嘿"
fmt.Println(nazha)
//_(匿名变量)用于接收不 需要的值
aa,_ := foo()
fmt.Println(aa)
_,bb := foo()
fmt.Println(bb)
//不能重复 志明 同名变量
var myname = "alex"
//var myname = "alex"
fmt.Println(myname)
}
2.常量声明:
//iota 总结:
//1. 遇到const 初始化为0
//2. const 每新增一次变量声明iota 就递增1
//3. const 声明中如果不写,默认就和上一行一样
package main
import (
"fmt"
)
//常量的批量声明 c,d 等于1000
const (
a = 1000
b = 1000
c
d
)
//iota iota出现一次就自增计数1 ,const中每新增一行常量声明,将使iota 增加计数1 ,只能在常量里,在定义枚举时很有用
const (
n1 = iota //0
n2 = iota //1
n3 = iota //2
n4 = iota //3
)
const (
aa = iota //0
bb //1
cc //2
dd //3
)
const (
c1 = iota //0
c2 = 100 //100 增加了一行,iota 会加1
c3 = iota //2
c4 //3
)
const c5 = iota
//忽略某个值
const (
mm = iota //0
nn //1
_ //
kk //3
)
const (
_ = iota //0
KB = 1 << (10 * iota) //向左移10位 2^10 = 1024
MB = 1 << (10 * iota)//2^20 = 1024*1024
GB = 1 << (10 * iota)//2^30
TB = 1 << (10 * iota)//2^40
PB = 1 << (10 * iota)//2^50
)
const (
a0,b0 = iota+1,iota+2//没有新一次,iota = 0 a = 1,b = 2 //1 2
c0,d0 //不写,和上面一样。c0,d0 = iota+1,iota+2 iota = 1, c0=1+1=2 d0 = 1+2 = 3 //2 3
e0,f0 //iota = 2 iota+1 = 3,iota+2 = 4 //3 4
)
func main() {
//常量
const pi = 3.14
const e = 2.178
//多个常量也可以
const (
pi2 = 3.13
e2 = 2.128
)
fmt.Println(a,b,c,d)
//fmt.Println(n1,n2,n3,n4)
fmt.Println(aa,bb,cc,dd)
fmt.Println(mm,nn,kk)
fmt.Println(c1,c2,c3,c4,c5)
fmt.Println(KB,MB,GB,TB,PB)
fmt.Println(a0,b0,c0,d0,f0)
}
3.数据类型
//查看帮助文档
//方法1:cmd --> go doc strings
//方法2:
//1.cmd 先启一个服务:godoc -http=:9000
//2. 打开浏览器 http://127.0.0.1:9000/
//3. 点击 “Packages” 就可查看了
//方法3:golang 标准库文档: https://studygolang.com/pkgdoc
package main
//批量导入包
import (
"fmt"
"math"
"strings"
)
//数据类型
//uint8 相当于byte
func main() {
//十进制
var a int = 10
fmt.Printf("%d \n",a) //10
fmt.Printf("%b \n" ,a) //1010 占位符%b表示二进制
// 八进制 以0开头
var b int = 077
fmt.Printf("%o \n",b ) //77
//十六进制 以0x开头
var c int = 0xff
fmt.Printf("%x \n" ,c ) // ff
fmt.Printf("%X \n" ,c ) // FF
//变量的内存地址
fmt.Printf("%p \n ",&a ) //%p 表示十六进制的内存地地
//浮点型
fmt.Println(math.MaxFloat64)
fmt.Println(math.MaxFloat32)
fmt.Println(math.Pi)
fmt.Printf("%.2f \n",math.Pi)
//bool GO语言不允许将整型强制转换成bool
//字符串转义
fmt.Println(" str:= \"c:\\Code\\lesson1\\go.exe\" ")
fmt.Println(" \"c:\\go.exe\" ")
var s1 = "单行文本"
//注:多行文本,使用esc下方的 键, 原样输出
var s2 = `这
是 "这\里不用转义"
多行
文
`
fmt.Println(s1)
fmt.Println(s2)
//str 求长度
ss := "alexdsb"
fmt.Println(len(ss))
//拼接字符串用 + 或 fmt.Spintf
sk := "Python"
fmt.Println(sk+"--"+ ss)
scom := fmt.Sprint("%s---%s",ss,sk)
fmt.Println(scom)
//分割
ret := strings.Split(ss,"x")
fmt.Println(ret)
//判断是否包含
ret2 := strings.Contains(ss,"sb")
fmt.Println(ret2)
//判断 前辍
ret3 := strings.HasPrefix(ss,"alex")
ret4 := strings.HasSuffix(ss,"sb")
fmt.Println(ret3,ret4)
//求字串的位置,
s4 := "applepen"
fmt.Println(strings.Index(s4,"p"))//索引从0开始 // 1
fmt.Println(strings.LastIndexAny(s4,"p"))//索引从0开始 //5
//字符串合并
a1 := [] string{"Python","PHP","JavaScript" ,"Ruby","Golang"}
fmt.Println(strings.Join(a1,"~"))
}
4.字符的使用与修改
package main
import "fmt"
//char 字符使用单引号 ''
func main() {
s1 := "Golang"
c1 := 'G'
s2 := "中国"
c2 :='中' //UTF-8编码下一个中文 占3个字节
fmt.Println(s1,c1)
fmt.Println(s2,c2)
s3 := "hello沙河"
fmt.Println(len(s3))
//遍历字符串
for i := 0 ; i <len(s3);i++{
fmt.Printf("%c\n",s3[i])
}
fmt.Println()
//for range 循环,是按照rune类型去遍历的
for _,v := range s3{
fmt.Printf("%c\n",v)
}
for k,v := range s3{
fmt.Printf("%d - %c\n",k,v)
}
//修改字符串
//[]rune []byte
changeString()
}
func changeString() {
s1 := "big"
//强制类型转换 s1 = string(byteS1)
byteS1 := []byte(s1)
byteS1[0] = 'p'
s1 = string(byteS1)
fmt.Println(s1)
//string(runeS2) go语言中只有强制类型转换,没有隐式类型转换
s2 := "白萝不"
runeS2 := []rune(s2)
runeS2[0] = '红'
fmt.Println(string(runeS2))
}
语言的学习
一、day02
1.if for 流程语句:
package main
import "fmt"
func main() {
s1 := "Hello"
//方法1
byteArray := [] byte(s1)
s2 := ""
for i:= len(byteArray) -1 ;i >= 0;i--{
//强制类型转换
s2 = s2 + string(byteArray[i])
}
fmt.Println(s2)
//方法2
lenth := len(byteArray)//5
for i :=0 ; i< lenth/2 ; i++ {
//0 ,4 = 4, 0 互换
byteArray[i],byteArray[lenth-1-i] = byteArray[lenth-1-i],byteArray[i]
}
fmt.Println(string(byteArray))
//流程控制
age := 19
if age > 18 {
fmt.Println("开业了")
} else if age < 18 {
fmt.Println("warning...")
}else {
fmt.Println("you are old")
}
age = 18
if age == 18 {
fmt.Println(age)
}
//方法2
if age2:=28;age2>18{
fmt.Println("成年了")
}
age3 := 18
for age3 > 0 {
age3--
}
switchDemo()
//for{
// fmt.Println("无限循环")
// break .goto ,return panic(报错) 语句强制退出循环
//}
//for range ?
switchDemo3()
goDemo()
goBreak()
}
func switchDemo() {
finger := 3
switch finger {
case 1:
fmt.Println("1")
case 2,3:
fmt.Println("2-----------")
default:
fmt.Println("defautl")
}
}
func switchDemo2() {
age := 30
//注:switch后没值
switch {
case age < 25 :
fmt.Println("1")
case age < 30 && age > 25:
fmt.Println("2-----------")
case age > 60:
fmt.Println("> 1")
default:
fmt.Println("defautl")
}
}
func switchDemo3() {
s := "a"
//注:switch后没值
switch {
case s == "a" :
fmt.Println("1")
fallthrough //无条件的 运行 下面的case 语句
case s=="b":
fmt.Println("b")//这里 被强制 运行
case s == "c":
fmt.Println("> 1")
default:
fmt.Println("...")
}
}
func goDemo() {
for i:= 0 ;i<5 ;i++{
for j:=0;j<3;j++{
if i==2 && j==2{
fmt.Printf("%s----%s \n",i,j)
goto breakTag
}
}
}
breakTag:
fmt.Println("结束for循环")
}
func goBreak() {
breaklable01:
for i:= 0 ;i<5 ;i++{
for j:=0;j<3;j++{
if i==2 && j==2{
fmt.Printf("结束 %s----%s \n",i,j)
break breaklable01
}
}
}
fmt.Println("goBreak 跳出二层for循环")
}