go语言(四)数据类型及fmt总结

数据类型的详细介绍请查看李文周老师的博客

整型

package main

import (
	"fmt"
)

func main() {
	// 十进制
	i1 := 10
	fmt.Printf("%d\n", i1)
	fmt.Printf("%o\n", i1) // 把10进制转换成八进制
	fmt.Printf("%x\n", i1) // 把10进制转换成16进制
	fmt.Printf("%b\n", i1) // 把10进制转换成二进制

	// 八进制
	i2 := 077
	fmt.Printf("%d\n", i2)

	// 十六进制
	i3 := 0x1ff
	fmt.Printf("%d\n", i3)

	// %T查看变量类型
	fmt.Printf("%T\n", i3)

	// 声明int8类型的变量
	i4 := int8(9)
	fmt.Printf("%T\n", i4)
	fmt.Printf("%o\n", i4)
}

浮点型

package main

import (
	"fmt"
)

func main() {
	f1 := 1.23456

	fmt.Printf("%T\n", f1) // 默认Go语言中所有的小数都是float64类型

	f2 := float32(1.23456)

	fmt.Printf("%T\n", f2) // 显示声明float32类型

	//f1 = f2	// float32类型的值不能直接赋值给float64类型的变量
}

布尔值

package main

import "fmt"

func main() {
	b1 := true

	var b2 bool // 默认值是flase

	fmt.Printf("%T\n", b1)
	fmt.Printf("%T\n value:%v\n", b2, b2) // %v是value值
}

字符串

Go语言中的字符串是用双引号包裹的!!!
Go语言中的单引号包裹的是字符!!!
其他的和PHP差不多
字符串中的转义和php一样也是通过\转义

// 字符串
s := "Hello 北京"

// 单独的字母,汉子,符号表示一个字符
c1 := 'h'
c2 := '1'
c3 := '啥'

组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号(’)包裹起来,如:

var a := '中'
var b := 'x'

Go 语言的字符有以下两种:

uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
rune类型,代表一个 UTF-8字符。

当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。

Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。
也就是可以把字符串看成一个字符的集合,其中可能有数字字母,也可能有汉字,对应不同的字符,会保存为不同的类型,字母数字会保存成uint8(byte)类型,对于汉字这种复杂字符会保存成rune类型. 整体还是字符串.

package main

import (
	"fmt"
	"strings"
)

func main() {
	// 反斜线转义
	path := "http:\\www.baidu.com\\abc\\123"
	// ``原样显示
	path1 := `http:\www.baidu.com\abc\123`
	fmt.Println(path)
	fmt.Println(path1)
	// 单行字符串
	a := "I'm ok"
	// 多行字符串
	s := `
		人之初
		性本善
	`
	fmt.Println(a)
	fmt.Println(s)

	// 字符串相关操作,打印字符串长度
	fmt.Println(len(path1))
	fmt.Println(len(path))

	//字符串拼接
	name := "张三"
	world := "哈哈哈"

	// 两个字符串可以直接拼接成新的字符串
	ss := name + world

	fmt.Println(ss)
	// Sprintf 格式化后的数据不舒服返回成字符串类型
	ss1 := fmt.Sprintf("%v%v", name, world)
	fmt.Println(ss1)

	// 格式化输出两个需要拼接的字符串
	fmt.Printf("%s%s", name, world)

	// 分割
	ret := strings.Split(path, "\\")
	fmt.Println(ret) //[http: www.baidu.com abc 123]

	// 包含
	fmt.Println(strings.Contains(ss, "张三")) // true
	fmt.Println(strings.Contains(ss, "李四")) // false

	// 前缀
	fmt.Println(strings.HasPrefix(ss, "张三")) // true
	// 后缀
	fmt.Println(strings.HasSuffix(ss, "张三")) // false

	// 字符串出现的位置
	s4 := "abcdeb"
	fmt.Println(strings.Index(s4, "c")) // 2
	// 字符串最后出现的位置
	fmt.Println(strings.LastIndex(s4, "b")) // 5

	// 拼接
	fmt.Println(strings.Join(ret, "+")) // http:+www.baidu.com+abc+123
	
	// 字符串的修改
	s5 := "白萝卜"            // => '白' '萝' '卜'
	s6 := []rune(s5)       // 把字符串强制转换成一个rune切片
	s6[0] = '红'            // 把第一个字符'白'修改成'红'
	fmt.Printf(string(s6)) // 把rune切片强制转换成字符串输出

	b := 65
	fmt.Printf("%c\n", b) //%c 该值对应的unicode码值  输出 A
	c := '中'
	fmt.Printf("%v(%c)", c, c) // 20013(中)

	d := 'a' // rune(int32)
	e := "a" // string

	fmt.Printf("d=%T,e=%T", d, e) // d=int32,e=string
	fmt.Printf("d=%v,e=%v", d, e) // d=97,e=a
}

//

fmt的总结

package main

import "fmt"

func main() {
	n := 100
	fmt.Printf("%T\n", n)  // 查看类型
	fmt.Printf("%#v\n", n) // 查看类型的值
	fmt.Printf("%b\n", n)  // 二进制
	fmt.Printf("%d\n", n)  // 十进制
	fmt.Printf("%o\n", n)  // 八进制
	fmt.Printf("%x\n", n)  // 十六进制

	s := "Hello"
	fmt.Printf("%s\n", s)  // 字符串类型
	fmt.Printf("%v\n", s)  //万能的可以打印所有的类型
	fmt.Printf("%#v\n", s) //%#v 会打印出来对应的类型,字符串会带双引号
	
	b := 65
	fmt.Printf("%c\n", b) //%c 该值对应的unicode码值  输出 A
	c := '中'
	fmt.Printf("%v(%c)", c, c) // 20013(中)
}

类型转换

Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

强制类型转换的基本语法如下:
T(表达式)
和PHP语法一样, 比如说浮点转int就直接int(变量名)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值