package main
import (
"fmt"
"math"
"strings"
"unicode"
)
const(
bbb=iota
cccc
)
func main() {
//无法直接定义二进制
var a int = 10
fmt.Printf("%d %o %x %v\n", a, a, a, a)
//文件权限 0642
var b int = 077
fmt.Printf("%b %d\n", b, b)
c := 0xff
fmt.Printf("%x \n", c)
fmt.Printf("%X %d\n", c, c)
fmt.Printf("%T\n", c)
i4, i5 := int8(9), int16(14)
fmt.Printf("%T,%T\n", i4, i5)
fmt.Println(math.MaxFloat32, math.MaxFloat64)
f1 := 1.2345 //默认Go语言中的小数都是float64类型
f2 := float32(2.345) //显式声明float32类型
fmt.Printf("%T ,%T\n", f1, f2)
//f1 = f2 //float32 和float64 类型的值不能直接赋值给float64
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1, c2)
//布尔类型变量的默认值是false
//go语言中不允许将类型强制转换为布尔型
b1 := true
var b2 bool
fmt.Printf("%T, %T,value :%v\n", b1, b2, b2)
var n = 100
fmt.Printf("%T,%d,%b,%o,%x,%s\n", n, n, n, n, n, string(n))
var s = "hello 沙河"
fmt.Printf("字符串: %#v\n", s)
//字符串,只能用双引号,单引号是字符
s1 := "hello"
s2 := "你好"
//字节,1字节=8bit(8个二进制位)
fmt.Printf("%s ,%s \n", s1, s2)
//一个字符 'A' = 1个字节
//1个utf编码的汉字 '沙' = 一般占三个字节
// \ 本来具有特殊含义的,单纯的 \
path := "\"C:\\Users\\Administrator\\Desktop\\TI2.0\\3.4\""
fmt.Println(path)
s3 := "I'm Ok"
fmt.Println(s3)
s4 := `
世情薄
人情恶
`
fmt.Println(s4)
//字符串的常用操作
//字符串常用操作
fmt.Println(len(s4))
name := "理想"
world := "dsb"
fmt.Println(name + world)
ss1 := fmt.Sprintf("%s,%s", name, world)
fmt.Println(ss1)
ret := strings.Split(path, "\\")
fmt.Println(ret)
fmt.Println(strings.Contains(ss1, "理想"))
fmt.Println(strings.HasPrefix("hello world", "he"))
fmt.Println(strings.HasSuffix("hello world", "ld"))
fmt.Println(strings.Index("helloworld", "ow"))
fmt.Println(strings.LastIndex("helloworld", "llo"))
fmt.Println(strings.Join(ret, "+"))
pp := "Hello 沙河,번역하다."
for _, c := range pp {
fmt.Printf("%c\n", c)
}
//go语言为了处理非ASCII码类型的字符,定义了新的rune类型
//go语言的字符有以下两种,1 uint8类型或byte型,代表ascii的一个字符,2 rune类型(实际上是个int32),代表一个utf-8字符
//字符串底层是个byte数组,可以和[]byte类型相互转换,字符串是不能修改的,字符串是byte字节组成的,所以
//字符串的长度是byte字节长度。rune类型表示utf8字符,一个rune字符由一个或多个byte组成
ss2 := "白萝卜"
ss3 := []rune(ss2) //字符串强制转换成切片
ss3[0] = '红'
fmt.Println(string(ss3))
sss1, sss2 := '红', "红"
sss3, sss4 := byte('H'), "H" // byte(uint8)
fmt.Printf("sss1:%T,sss2:%T,sss3:%T,sss4:%T,%d\n", sss1, sss2, sss3, sss4, sss3)
//类型转换,只有强制类型转换,没有隐式类型转换,
n1 := 10
var f float64
f = float64(n1)
fmt.Printf("%T\n", f)
var aa, bb = 3.1, 4.1
var cc int
cc = int(math.Sqrt(float64(aa*aa + bb*bb)))
fmt.Println(cc)
var in int = 12
var fl float32 = 1.12
var bo bool = false
var st string = "第三方"
fmt.Printf("%T,%v,%T,%v,%T,%v,%T,%v\n", in, in, fl, fl, bo, bo, st, st)
fmt.Printf("%x\n", "我")
fmt.Println(CountHans("hw大师傅daf发顺丰#"))
fmt.Println(bbb,cccc)
}
func CountHans(s string) (count int) {
for _, c := range s {
if unicode.Is(unicode.Han, c) {
count++
}
}
return
}