vlambda博客
学习文章列表

七天学习Go语言-从0-0.04

今天给大家带来的是数据类型以及指针的简单讲解

数据类型


七天学习Go语言-从0-0.04


补充说明:
Int/uint/uintptr 这些类型的长度都是根据运行程序所在的操作系统类型决定的。在32位操作系统上就用32位(4字节),在64位操作系统上就用64位(8字节)

字符串的声明和初始化

str := "hello string!

字符串的转义

在go语言中,字符串使用英文双引号(“”)或者反单引号(`)来创建
反单引号用来创建原生的字符串,可能由多行组成,但不支持转义,并且可以包含除反单引号外的其他所有字符


// var.gopackage main
import ( "fmt")
func main() { str1 := "\"Go web\", I love you \n " //支持转义,但不能用来引用多行 str2 := `"Go web", I love you \n ` //支持多行组成,但是不支持转义 fmt.Println(str1) fmt.Println(str2)}

七天学习Go语言-从0-0.04


字符串的连接

// var.gopackage main
import ( "fmt")
func main() { str := "I love" + " you" str += ", my dear bear two" fmt.Println(str)}


七天学习Go语言-从0-0.04


字符串的操作值

字符串的内容可以通过标准索引来获取:在方括号“[]”内写入索引,索引从0开始计数


package main
import ( "fmt" "unicode/utf8")
func main() { str := "bageyalu" fmt.Println(str[0]) //获取字符串索引位置为0的原始字节,即ascii值 fmt.Println(str[0:3]) //获取字符串索引位置为0-3的字符串 fmt.Println(str[0:]) //获取字符串索引位置为0-末尾的字符串 fmt.Println(str[:3]) //获取字符串索引位置截取到3的字符串,不包含3 fmt.Println(len(str)) //获取字符串的字节数 fmt.Println(utf8.RuneCountInString(str)) //获取字符串字符的个数 fmt.Println([]rune(str)) //获取字符串的每一个字节转换的码点值,即ascii值 fmt.Println(string(str[0])) //获取字符串索引位置为0的字符串值}


七天学习Go语言-从0-0.04


字符串的遍历

若是想遍历字符串的字节,需要使用字符串切片,这样反悔的将是一个字符,而不是一个字节


package main
import ( "fmt")
func main() { str := "i love you" chars := []rune(str) for _, char := range chars { fmt.Println(string(char)) }}


七天学习Go语言-从0-0.04


通过for-range将字符串迭代出来

package main
import ( "fmt")
func main() { str := "i love you" for index, char := range str { fmt.Printf("%d %U %c \n", index, char, char) }}


七天学习Go语言-从0-0.04


字符串的修改

在go中,不能直接修改字符串的内容,即不能使用str[i]这种方式进行替换,若是想修改,需要将字符串的内容复制到一个可写的变量中([]byte或[]rune)
1. 修改单个字节


package main
import ( "fmt")
func main() { str := "i love you " by := []byte(str) by[10] = '!' fmt.Printf("%s\n", str) fmt.Printf("%s\n", by)}

七天学习Go语言-从0-0.04


需要注意的是,修改字节仅能一次修改一个,根据字节的下标进行索引,下标不存在会报错,同样不能修改中文字符,而且替换的内容请用单引号引起,使用双引号同样会报错修改中文字符需要使用切片 []rune


2. 修改字符


package main
import ( "fmt")
func main() { str := "i love you 男士" by := []rune(str) by[11] = '女' fmt.Println(str) fmt.Println(string(by))}


七天学习Go语言-从0-0.04



package main
import ( "fmt")
func main() { a := 10 // 声明一个字符串变量类型 ptr := &a // 对变量a取地址, ptr的类型为 * int fmt.Printf("ptr 类型: %T\n", ptr) // 返回ptr的类型 fmt.Printf("ptr指针地址: %p\n", ptr) // 返回ptr的指针地址,其实我觉得这里应该是a的指针地址,ptr的指针地址应该是&ptr fmt.Printf("ptr指针地址: %p\n", &ptr) // 返回ptr的指针地址 fmt.Printf("a指针地址: %p\n", &a) // 返回a的指针地址 value := *ptr //对指针进行取值(去内存取值) fmt.Printf("value 类型: %T\n", value) // 返回取值后的类型 fmt.Printf("value去内存后的值: %d\n", value) // 返回指针取值后指向变量的值 fmt.Printf("ptr不取值: %d\n", ptr) // 返回不取值时的样子}



用指针修改值

package main
import ( "fmt")
func exchange(c *int, d *int) { t := *c //取c指针的值,即*&a,赋值给临时变量t,此时 t = a = 6 *c = *d //取d指针的值,即*&b,赋值给c指针指向的变量,即 *c = *&a = *&b = 8; a=8 *d = t //将临时变量t的值,赋值给d指针指向的变量,即 *&d = *&b = t = 6 ; b=6 //fmt.Println(t) //输出6 //fmt.Println(*c) //输出8 //fmt.Println(*d) //输出6}
func main() { a, b := 6, 8 //初始化变量a , b exchange(&a, &b) //交换变量值 //fmt.Printf("a的指针地址: %p, b的指针地址: %p\n", &a, &b) //fmt.Printf("a的指针取值: %d, b的指针取值: %d\n", *&a, *&b) fmt.Println(a, b) //输出打印变量值}



这个指针类型确实不是很容易理解,我白扯老半天,大家多敲代码多试验,好了,今天的分享就先到这,明天我会为大家分享四个类型以及函数相关,每天学习十分钟,卷死别人